将.wav文件和.ttf字体文件添加到可执行jar文件中

时间:2015-05-27 11:48:29

标签: java jar wav executable-jar

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

但是我试图在jar文件中包含正确执行我的应用程序所需的所有文件。我用了命令:

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

在Windows命令提示符下

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

***** EDIT ******

下面是我如何加载字体。

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

下面是我如何加载.wav文件:

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

2 个答案:

答案 0 :(得分:4)

很可能你没有通过类加载器加载这些文件。

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

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

所以,例如,你有... ...

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

你应该有这样的东西......

typedef struct { char *string; struct my_struct **children; //I want a list of children, therefore pointer to pointer int child_num; } my_struct;

然后,Java将知道查找资源的类路径(因此在jar中)。

答案 1 :(得分:0)

你应该使用

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

这是您加载位于类路径中的资源的方式(无论是来自.jar还是目录)。请记住,如果您将jar部署为Web应用程序的一部分,则可能无法在某些容器中运行。

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