2015-05-27 162 views
0

我创建了一个可执行的jar文件并将所有.wav,.ttf,.png和.class文件添加到jar中。当我运行jar文件时,当jar文件包含在需要所有其他文件的文件夹中时,它完美地工作。将.wav文件和.ttf字体文件添加到可执行jar文件中

但是我想包括所有的文件,需要在jar文件中正确执行我的应用程序。我用命令:

jar cvfe App.jar Main *.class *.png *.ttf *.wav

在Windows命令提示符。在包含上面列出的所有必需文件的文件夹外部执行jar文件时,只有图像文件和类文件似乎包含在jar文件中,字体文件和声音文件不起作用,并且GUI显示默认字体和声音也不起作用。 命令提示符上的堆栈跟踪显示当我执行上述命令时所需的所有文件都被添加,但似乎无法工作。

*****编辑******

我继承人如何我在加载字体。

Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("C&LBOLD.ttf")).deriveFont(50f); 

我继承人如何我加载.wav文件:

File waveFile = new File("sounds//berlin.wav"); 
+0

http://stackoverflow.com/questions/4548699/load-file-within-a-jar – Tschallacka

回答

4

最有可能你不是通过类加载器加载的文件。

如果您提供加载这些文件的代码,我们可以确认。

[编辑]感谢您发布额外的代码 - 这是怀疑。您需要使用类加载器加载文件。

因此,例如,当你有...

new FileInputStream("C&LBOLD.ttf")

你应该有这样的事情,而不是...

this.getClass().getClassLoader().getResourceAsStream("C&LBOLD.ttf")

Java将后来才知道旁观类资源的类路径(因此在jar中)。

+0

谢谢你刚刚编辑了我如何加载文件 – fooll

+0

你正在加载这些资源作为文件系统的文件。请参阅我的修订答案以了解如何解决。 –

0

您应该使用

Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getClassLoader().getResourceAsStream("C&LBOLD.ttf")).deriveFont(50f); 

你这是怎么加载位于类路径(无论是从一个.jar或目录)的资源。请记住,如果您将jar部署为Web应用程序的一部分,则这可能无法在某些容器中使用。

这也是一个好主意,检查null的输入,以确保资源退出。