我编写了一个显示图像和播放声音的应用程序。 这就是为什么它需要从项目的 src 文件夹中名为“recources”的文件夹加载图像和声音。
对于图像,我使用以下代码来加载 png,然后显示它我的框架:
ImageIcon img = new ImageIcon(getClass().getResource("/recources/img.png"));
这对于在 Netbeans 内运行应用程序以及将其构建到 jar 中后也运行良好。
声音正在加载,如下所示:
public Sound(){
try
{
File audiodata = new File("/recources/audio.wav");
if(audiodata.exists()){
audioInput = AudioSystem.getAudioInputStream(audiodata);
clip= AudioSystem.getClip();
clip.open(audioInput);
clip.start();
}
}
catch(Exception e){
e.printStackTrace();
}
}
这也在 Netbeans 中工作,但在完成的 jar 中不行。 --> 空指针异常
我的代码需要更改什么?
还有什么不起作用:
我还想使用以下代码加载带有 jdbc 驱动程序的 sqllite 数据库:
public void getConnection() {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Lagerverwaltung.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Connection con = DriverManager.getConnection("jdbc:sqlite:recources/database.db");
} catch (SQLException ex) {
Logger.getLogger(Lagerverwaltung.class.getName()).log(Level.SEVERE, null, ex);
}
}
它有同样的问题,当我在 Netbeans 中运行它时,它找到数据库,但在构建的 jar 中找不到数据库。
我将资源文件夹作为源添加到我的项目属性中。
最佳答案
尝试将声音类别更改为:
public Sound(){
try
{
File audiodata = new File(this.getClass().getResourceAsStream("/recources/audio.wav").toString());
if(audiodatei.exists()){
audioInput = AudioSystem.getAudioInputStream(audiodata);
clip= AudioSystem.getClip();
clip.open(audioInput);
clip.start();
}
}
catch(Exception e){
e.printStackTrace();
}
}
并获取连接到:
public void getConnection() {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Lagerverwaltung.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Connection con = DriverManager.getConnection("jdbc:sqlite:"+this.getClass().getResourceAsStream("/recources/database.db").toString());
} catch (SQLException ex) {
Logger.getLogger(Lagerverwaltung.class.getName()).log(Level.SEVERE, null, ex);
}
}
刚刚更改了文件的访问方式。希望它有效。告诉结果。
关于Java 应用程序在 Netbeans 中将其构建为 .jar 后找不到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62388433/