我创建了一个可执行jar文件,并将所有.wav,.ttf,.png和.class文件添加到jar中。当我运行jar文件时,当jar文件包含在需要所有其他文件的文件夹中时,它可以正常工作。
但是我试图在jar文件中包含正确执行我的应用程序所需的所有文件。我用了命令:
jar cvfe App.jar Main *.class *.png *.ttf *.wav
。在包含上面列出的所有必要文件的文件夹外执行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");
答案 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 的输入以确保资源退出也是个好主意。