为什么JAR找不到资源?

时间:2012-08-21 11:01:53

标签: java eclipse jar

我有两个班级(Playeditor)。 editor使用PlayPlay使用一些外部文件。我将它们导入Eclipse中以便直接解决它们(正如您在第一个屏幕截图中看到的那样)。 enter image description here 我希望JAR能够包含这些文件并能够使用(导入)它们。那可能吗?将项目导出到JAR时,我应该选择哪些选项?

1 个答案:

答案 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

GIT Hub Repo with Test project

您应该可以在 this zip中导入项目,并查看代码是否有效。

你需要'胖罐'吗?

有点偏离主题,但是如果你需要构建一个包含项目运行所需的所有jar的fat jar并且是一个可执行文件,那么尝试使用http://fjep.sourceforge.net/插件来构建一个胖广口瓶中。

您可以使用File -> Export -> Other -> One Jar Exporter导出包含jar的java项目。这样构建的jar是一个可执行的jar,不需要其他任何东西来运行。