gpt4 book ai didi

java - 从可执行 JAR 运行代码时无法加载资源

转载 作者:行者123 更新时间:2023-12-02 04:39:09 25 4
gpt4 key购买 nike

我遇到了这个问题,当我运行程序的 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;
}

这是我在命令提示符中出现的错误:

enter image description here

这是我每次导出时jar中的文件(无论资源是否在res中):

enter image description here

我被难住了。如果有人知道如何解决这个问题,请帮助我。

最佳答案

我找到了问题的答案。

ResourseLoader.getResourceStreamAs() 不适用于 JAR 文件内部,因此您需要执行 getClass().getResourceStreamAs()[ClassName] .class.getResourceStreamAs(),如果它是静态的。

此外,我必须将文件的位置从 res/[resource file]/[resource] 更改为 /[resource file]/[resource] 因为导出时,它会取出 res 中的所有文件。另外,您必须确保在路径的开头有 / ,以便指定它在源文件夹中搜索,否则它将在该类的文件夹中搜索称为 getResourceStreamAs()。而且,new FileInputStream() 在 JAR 文件中不起作用,因此您必须使用 [ClassName].class.getResourceStreamAs() 代替。哦,最重要的是,我有一些文件以某种方式无缘无故地将扩展名部分全部大写。所以这让我有些困惑。我基本上只需要摆弄代码,但我成功了!

还有一件事:确保将 resources 文件夹添加到构建路径中的“sources”选项卡中,否则 Eclipse 将不会导出它。如果您希望将库导出到 JAR 中,则必须使用 JarSplicer 制作一个 fat jar 来手动添加它们。

关于java - 从可执行 JAR 运行代码时无法加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com