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

时间:2015-05-22 00:09:17

标签: java jar resources export

我遇到这个问题,当我运行程序的JAR时没有任何资源加载。我已经更改了代码并检查了确实加载图像的代码和加载声音的代码都不起作用。当我在eclipse中运行时,它工作得很好。我检查了7-Zip,声音和图像文件不再存在于res文件夹中。在我导出之前,我尝试更改路径文件和程序中资源的位置,但这没有用。我还有res文件夹作为构建路径中的源文件夹。我用eclipse导出JAR,然后用JarSplicer将我的库添加到其中。以下是加载图像和声音资源的代码:

-Load Sound -

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;
}

-Load Images -

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

我被困在这里。如果有人知道如何解决这个问题,那么请帮助我。

2 个答案:

答案 0 :(得分:2)

我找到了问题的答案。

ResourseLoader.getResourceStreamAs()在JAR文件中不起作用,因此如果它是静态的,您需要getClass().getResourceStreamAs()[ClassName].class.getResourceStreamAs()

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

还有一件事:确保将[ClassName].class.getResourceStreamAs()文件夹添加到构建路径中的sources选项卡,否则eclipse不会导出它。如果您希望将库导出到JAR中,那么您必须通过制作带有resources的胖罐来手动添加它们。

答案 1 :(得分:2)

事实证明,资源路径区分大小写,如果路径中有一个拼写错误的字母,则无法在 jar 文件中工作。