我正试图从我的JAR文件加载一个剪辑,但它只在我的IDE(NetBeans(中工作,而在我运行它的JAR可执行文件时不工作。
这是我使用的返回片段的代码:
public static Clip getClipFromJar(String filePath) {
try {
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(FileLoader.class.getResourceAsStream(filePath)));
return clip;
} catch (Exception error) {
System.exit(-1);
return null;
}
}
我真的被卡住了,使用getResourceAsStream((似乎适用于其他事情,比如图像,但它不适用于获取剪辑。
谢谢大家的帮助!我从你们那里得到的技巧通常对编程很好,所以谢谢!:(
获取URL,处理AudioInputStream
和AudioSytem
,然后返回clip
。在之后,clip
可以像clip.start()
一样启动
try{
URL soundURL = getClass().getResource(filePath);
AudioInputStream AIS = AudioSystem.getAudioInputStream(soundURL);
Clip clip = AudioSystem.getClip();
clip.open(AIS);
return clip;
} catch (Exception ex) {
ex.printStackTrace();
}
注意:我试过这个代码,它在IDE和之外都能正常工作
getResourceAsStream()
在类路径上查找其资源,从类本身的位置开始——因此,如果您的剪辑(或任何资源(与类在同一文件夹中,它就会在那里找到它。如果它不存在,您必须确保它在类路径中的某个位置,听起来这可能是IDE环境和程序运行时之间的区别。
看看你的"filepath"——当然,如果它以斜杠开头,那么它就是绝对的,等等。;我假设你知道绝对路径和相对路径。
一个调试建议--消除所有调用的"堆叠"。打一个电话获取流;再调用一次以获取音频输入流,再调用第三次以打开它。然后,您至少可以放入跟踪语句来查看其中哪一个失败(因为您无法在IDE之外进行调试,而且它在那里没有失败(。