Java Can';当从可执行JAR运行代码时,不要加载资源

Java Can';当从可执行JAR运行代码时,不要加载资源,java,jar,resources,export,Java,Jar,Resources,Export,我遇到了这样一个问题,当我运行一个JAR程序时,没有任何资源加载。我已经更改了代码并检查了加载图像的代码和加载声音的代码是否都不起作用。当我在eclipse中运行它时,它工作得非常好。我用7-Zip检查过,声音和图像文件不再在res文件夹中。在导出程序之前,我尝试更改程序中的路径文件和资源的位置,但没有成功。我还将res文件夹作为构建路径中的源文件夹。我用eclipse导出JAR,然后用JAR将我的库添加到其中。以下是加载图像和声音资源的代码: -负载声音- public static Wave

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

-负载声音-

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时jar中的文件(无论资源是否在res中):


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

我找到了问题的答案

resourcesloader.getResourceStreamAs()
不能在JAR文件中工作,因此如果是静态的,则需要执行
getClass().getResourceStreamAs()
[ClassName].class.getResourceStreamAs()

此外,我必须将文件的位置从
res/[resource file]/[resource]
更改为
/[resource file]/[resource]
,因为导出时,它会取出res中的所有文件。此外,您必须确保路径开头有
/
,以便指定它在源文件夹中搜索,否则它将在名为
getResourceStreamAs()的类的文件夹中搜索。而且,
newfileinputstream()
在JAR文件中不起作用,因此您必须使用
[ClassName].class.getResourceStreamAs()
。哦,除此之外,我还有一些文件不知何故把扩展名部分的名字用大写字母写了出来。这让我有些困惑。我基本上只需要对代码做一些修改,但我让它工作起来了


还有一件事:确保将
resources
文件夹添加到构建路径的sources选项卡中,否则eclipse将不会导出它。如果您希望将库导出到JAR中,那么您必须手动添加它们,方法是使用
jarstipper
制作一个胖JAR。我找到了问题的答案

resourcesloader.getResourceStreamAs()
不能在JAR文件中工作,因此如果是静态的,则需要执行
getClass().getResourceStreamAs()
[ClassName].class.getResourceStreamAs()

此外,我必须将文件的位置从
res/[resource file]/[resource]
更改为
/[resource file]/[resource]
,因为导出时,它会取出res中的所有文件。此外,您必须确保路径开头有
/
,以便指定它在源文件夹中搜索,否则它将在名为
getResourceStreamAs()的类的文件夹中搜索。而且,
newfileinputstream()
在JAR文件中不起作用,因此您必须使用
[ClassName].class.getResourceStreamAs()
。哦,除此之外,我还有一些文件不知何故把扩展名部分的名字用大写字母写了出来。这让我有些困惑。我基本上只需要对代码做一些修改,但我让它工作起来了


还有一件事:确保将
resources
文件夹添加到构建路径的sources选项卡中,否则eclipse将不会导出它。如果您希望将库导出到JAR中,然后,您必须手动添加它们,方法是使用
jarstipper

制作一个胖jar。结果表明,到资源的路径区分大小写,如果路径中有一个字母键入错误,则在jar文件中不起作用。

结果表明,到资源的路径区分大小写,如果有一个字母键入错误,则在jar文件中不起作用路径中的字母。

jar文件中的
res/images
在哪里?您尝试过只使用
/images/
吗?请注意,文件夹只是
images
,但您尝试的是
res/images
@MadProgrammer,当我导出它时,它不会生成res文件夹。它只是将图像和声音文件夹从res文件夹中取出并放入其中。@immibis我知道。我试图更改文件路径,但没有成功。所以,这表明您使用的路径是错误的,因为异常情况是
res/images
,但您的Jar没有该路径…Jar文件中的
res/images
在哪里?您尝试过只使用
/images/
吗?请注意,文件夹只是
images
,但您尝试的是
res/images
@MadProgrammer,当我导出它时,它不会生成res文件夹。它只是将图像和声音文件夹从res文件夹中取出并放入其中。@immibis我知道。我试图更改文件路径,但没有成功。所以,这表明您使用的路径是错误的,因为异常有
res/images
,但您的Jar没有该路径……什么是“getResourceStreamAs()”?你是说getResourceAsStream()?在阅读你的回复之前,我已经准备好了很多线程。由于未知原因,
this.getClass().getResourcesAsStream(“/images/plus.png”)
在eclipse中工作,但不在带有文件
plus.png的jar中工作。在资本化之后,一切都在起作用+1什么是“getResourceStreamAs()”?你是说getResourceAsStream()?在阅读你的回复之前,我已经准备好了很多线程。由于未知原因,
this.getClass().getResourcesAsStream(“/images/plus.png”)
在eclipse中工作,但不在带有文件
plus.png的jar中工作。在资本化之后,一切都在起作用+1.