Java NetBeans在JAR文件中获取资源?
我一直在尝试在我的Netbeans Java项目中包含一些图像和声音,我在谷歌搜索了所有答案,所有这些我都尝试过并实现了,但有些人在Netbeans内部运行音频文件时正确播放了音频文件,但当它实际构建为JAR文件时却没有 在执行JAR文件时,我正在努力播放声音。据我所知,项目中的包/文件夹被编译并构建到JAR文件中 有人能告诉我如何正确获取资源的正确方向吗 我的代码如下:Java NetBeans在JAR文件中获取资源?,java,netbeans,getresource,Java,Netbeans,Getresource,我一直在尝试在我的Netbeans Java项目中包含一些图像和声音,我在谷歌搜索了所有答案,所有这些我都尝试过并实现了,但有些人在Netbeans内部运行音频文件时正确播放了音频文件,但当它实际构建为JAR文件时却没有 在执行JAR文件时,我正在努力播放声音。据我所知,项目中的包/文件夹被编译并构建到JAR文件中 有人能告诉我如何正确获取资源的正确方向吗 我的代码如下: public void SND_REQUEST() { AudioInputStream clipNameAIS;
public void SND_REQUEST() {
AudioInputStream clipNameAIS;
Clip clipNameClip = null;
try {
clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/Sounds/Cat.wav"));
clipNameClip = AudioSystem.getClip();
clipNameClip.open(clipNameAIS);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Request Button Sound Not Working");
}
clipNameClip.setFramePosition(0);
clipNameClip.start();
}
资源结构:
更新-22:45:
在Netbeans内部运行时,它似乎可以工作,但在可执行Jar文件中不起作用。
我尝试了两种方法,我会发布图片:
文件当然在里面,谢谢你在那一刻的帮助
更新代码:
public void SND_REQUEST() {
AudioInputStream clipNameAIS;
Clip clipNameClip = null;
try {
clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));
clipNameClip = AudioSystem.getClip();
clipNameClip.open(clipNameAIS);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Request Button Sound Not Working");
}
clipNameClip.setFramePosition(0);
clipNameClip.start();
}
结果:
打印堆栈跟踪:
更新-作品::
啊,发现问题了,谢谢你的帮助。没有想到在JOptionPane msgbox lol中传递E.printstack跟踪:似乎我需要BufferReader才能正确地流式处理它。而且路径是正确的。请看我的更新代码,它的工程:再次感谢
public void SND_REQUEST() {
AudioInputStream clipNameAIS;
Clip clipNameClip = null;
try {
InputStream audioSrc = getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav");
InputStream bufferedIn = new BufferedInputStream(audioSrc);
AudioInputStream audioStream = AudioSystem.getAudioInputStream(bufferedIn);
clipNameClip = AudioSystem.getClip();
clipNameClip.open(audioStream);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
return;
}
clipNameClip.setFramePosition(0);
clipNameClip.start();
}
有人能告诉我如何正确获取资源的正确方向吗
假定资源在创建的jar文件中,您可以将路径定义为相对于包根的绝对路径:
clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));
注意开始处的/将路径定义为相对于包根的绝对路径。您还可以定义相对于调用类的相对路径。例如,如果调用类位于/overtimesystem/Images/package中,则可以使用../Sounds/Cat.wav来访问资源。我认为路径应该是overtimesystem/Sounds/Cat.wav。如果以zip格式打开JAR文件,是否可以看到.wav文件?使用jar中找到的它们的路径。@AlpaxJ1打印堆栈跟踪,例如e.printStackTrace;要准确地验证异常是什么,isPlesae会看到我的打印堆栈跟踪更新,nullpointer exception说?路径不正确,它不可能是…啊,在JAR文件中运行它会出现以下错误:@AlpaxJ1,该链接建议如果出现此问题,您应该获得IOException而不是NullPointerException。但如果成功了,恭喜你。
clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));