我有两个班级(Play
和editor
)。editor
使用Play
. Play
使用一些外部文件。我将它们导入 Eclipse 以便直接处理它们(如您在第一个屏幕截图中所见)。
我希望 JAR 能够包含这些文件并能够使用(导入)它们。那可能吗?将项目导出到 JAR 时应该选择哪些选项?
1 回答
如果您想使用.wav
jar 中的文件,而不是String path = System.getProperty("user.dir");
从那里加载 wav 文件,请尝试执行以下操作:
InputStream stream = Play.class.getResourceAsStream("/result.wav");
从这里开始,似乎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
。
工作代码
这是一些可以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
在控制台中有两个。
带有测试项目的 GIT Hub 存储库
您应该能够在此zip 中导入项目并查看代码是否正常工作。
你需要一个“胖罐子”吗?
有点跑题了,但是如果您需要构建一个 fat jar
包含项目运行所需的所有 jar 并且是单个可执行文件的文件,那么请尝试使用http://fjep.sourceforge.net/插件来构建一个胖 jar。
您可以使用File -> Export -> Other -> One Jar Exporter
. 这样构建的 jar 是一个可执行的 jar,不需要其他任何东西来运行。