[英]Can't load resources when running the code from an executable JAR
我遇到这个问题,当我运行程序的JAR时,没有资源加载。 我已经更改了代码,并检查了加载图像和声音的代码确实不起作用。 当我在eclipse中运行它时,它工作得很好。 我检查了7-Zip,声音和图像文件不再位于res文件夹中。 在导出程序之前,我尝试更改程序中的路径文件和资源的位置,但这没有用。 在构建路径中,我还将res文件夹作为源文件夹。 我正在使用eclipse导出JAR,然后使用JarSplicer将我的库添加到其中。 以下是加载图像和声音资源的代码:
-加载声音-
public static WaveData LoadSound(String path){
WaveData sound = null;
try {
sound = WaveData.create(new BufferedInputStream(new FileInputStream(path)));
} catch (Exception e) {
e.printStackTrace();
}
return sound;
}
-加载图像-
public static Texture LoadTexture(String path, String fileType){
Texture tex = null;
InputStream in = ResourceLoader.getResourceAsStream(path);
try{
tex = TextureLoader.getTexture(fileType,in);
}catch(IOException e){
e.printStackTrace();
}
return tex;
}
这是我在命令提示符下的错误:
这是我每次导出时jar中的文件(无论资源是否为res):
我被困在这里。 如果有人知道如何解决此问题,请帮助我。
我找到了解决我问题的方法。
ResourseLoader.getResourceStreamAs()
在JAR文件中不起作用,因此,如果它是静态的,则需要执行getClass().getResourceStreamAs()
或[ClassName].class.getResourceStreamAs()
。
另外,我还必须将文件的位置从res/[resource file]/[resource]
更改为/[resource file]/[resource]
因为导出时,它会取出res中的所有文件。 另外,您必须确保在路径的开头具有/
,以便将其指定为在源文件夹中进行搜索,否则它将在名为getResourceStreamAs()
的类的文件夹中进行搜索。 而且, new FileInputStream()
在JAR文件中不起作用,因此您必须使用[ClassName].class.getResourceStreamAs()
。 哦,最重要的是,我有几个文件无缘无故地以某种方式使扩展名成为其名称。 所以这给了我一些困惑。 基本上,我只需要花很多时间去摆弄代码,但是我可以正常工作了!
还有一件事:确保将resources
文件夹添加到构建路径的“源”选项卡中,否则eclipse不会导出它。 而且,如果您希望将库导出到JAR中,则必须使用JarSplicer
制作一个胖罐子,以手动添加它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.