我有两个班级(Play
和editor
)。 editor
使用Play
。 Play
使用一些外部文件。我将它们导入Eclipse中以便直接解决它们(正如您在第一个屏幕截图中看到的那样)。
我希望JAR能够包含这些文件并能够使用(导入)它们。那可能吗?将项目导出到JAR时,我应该选择哪些选项?
答案 0 :(得分:3)
如果你想使用jar中的.wav
文件而不是String path = System.getProperty("user.dir");
然后从那里加载wav文件,请尝试执行以下操作:
InputStream stream = Play.class.getResourceAsStream("/result.wav");
从 here ,似乎AudioSystem
确实有一个重载的getAudioInputStream
,它接受InputStream
而不是File
对象(如代码中所示)。所以你可以有类似的东西:
public class Play{
public AudioInputStream find(String s) throws UnsupportedAudioFileException, IOException{
// Probably some try catch over the next statement to log the error if `result.wav` is not found.
InputStream stream = Play.class.getResourceAsStream("/result.wav");
return AudioSystem.getAudioInputStream(stream);
}
}
要使上述工作正常,必须将所有*.wav
文件复制到源文件夹,以便它们出现在类路径中。要做到这一点,您可以将* .wav移动到sint/src
开始(如果需要,然后再转到正确的wav
文件夹中)。这会将它们放在类路径/
的根目录中,并允许它们像这样引用:/result.wav
,/x_SECOND.wav
等。
以下是从 here 测试AudioInputStream
的一些工作代码:
public class A {
@Test
public void testAudioInputStream() throws UnsupportedAudioFileException, IOException {
InputStream stream = A.class.getResourceAsStream("/result.wav");
System.out.println(stream != null);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(stream);
System.out.println(audioInputStream != null);
}
}
上面的代码对我来说很好,我在控制台中有两个true
。
您应该可以在 this zip中导入项目,并查看代码是否有效。
有点偏离主题,但是如果你需要构建一个包含项目运行所需的所有jar的fat jar
并且是一个可执行文件,那么尝试使用http://fjep.sourceforge.net/插件来构建一个胖广口瓶中。
您可以使用File -> Export -> Other -> One Jar Exporter
导出包含jar的java项目。这样构建的jar是一个可执行的jar,不需要其他任何东西来运行。