Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可执行JAR中缺少文本文件?(Java Eclipse)_Java - Fatal编程技术网

可执行JAR中缺少文本文件?(Java Eclipse)

可执行JAR中缺少文本文件?(Java Eclipse),java,Java,我正在用Java做一个游戏。我加载了一个处理文本文件的标高图。文本文件位于workspace/src/resources/sprites/misc/level.txt中。当我从Eclipse编译游戏时,它工作得非常完美,没有任何问题。当我将游戏导出到JAR文件或可运行的JAR文件中时,如果打开.JAR,游戏窗口将打开,游戏开始,但缺少整个关卡,主角将陷入困境。如果在源代码中输入了错误的文件路径,也会出现同样的问题。所以我百分之百的担心,问题是当我创建JAR文件时,由于某种原因,它会弄乱文本文件的

我正在用Java做一个游戏。我加载了一个处理文本文件的标高图。文本文件位于workspace/src/resources/sprites/misc/level.txt中。当我从Eclipse编译游戏时,它工作得非常完美,没有任何问题。当我将游戏导出到JAR文件或可运行的JAR文件中时,如果打开.JAR,游戏窗口将打开,游戏开始,但缺少整个关卡,主角将陷入困境。如果在源代码中输入了错误的文件路径,也会出现同样的问题。所以我百分之百的担心,问题是当我创建JAR文件时,由于某种原因,它会弄乱文本文件的路径。这很奇怪,因为它不会发生在玩家的精灵身上!我能看到,但我看不到水平

此外,我加载精灵的方式如下:

currentSprite = new Sprite(new ImageIcon(getClass().getClassLoader().getResource("sprites/background/pricebox.gif")));
File f = new File("resources/sprites/misc/level.txt");
BufferedReader in = new BufferedReader(new FileReader(f));
并按如下方式处理文本文件:

currentSprite = new Sprite(new ImageIcon(getClass().getClassLoader().getResource("sprites/background/pricebox.gif")));
File f = new File("resources/sprites/misc/level.txt");
BufferedReader in = new BufferedReader(new FileReader(f));
有什么问题吗

谢谢。

A表示文件系统中的一个文件。当它在JAR中时,它不是文件系统中的文件。您希望以与加载映像相同的方式加载资源--作为类路径资源:

BufferedReader in = new BufferedReader(
    new InputStreamReader(
        getClass().getClassLoader().getResourceAsStream(
            "resources/sprites/misc/level.txt")));
或者稍微迂回一点,但更类似于加载图像的方式:

URL resource = getClass().getClassLoader().getResource(
    "resources/sprites/misc/level.txt");
BufferedReader in = new BufferedReader(
    new InputStreamReader(resource.openStream()));
表示文件系统上的文件。当它在JAR中时,它不是文件系统中的文件。您希望以与加载映像相同的方式加载资源--作为类路径资源:

BufferedReader in = new BufferedReader(
    new InputStreamReader(
        getClass().getClassLoader().getResourceAsStream(
            "resources/sprites/misc/level.txt")));
或者稍微迂回一点,但更类似于加载图像的方式:

URL resource = getClass().getClassLoader().getResource(
    "resources/sprites/misc/level.txt");
BufferedReader in = new BufferedReader(
    new InputStreamReader(resource.openStream()));

也许这对你有帮助


另外,有关指定文件分隔符斜杠的信息,请参见文件分隔符

也许这对你有帮助


另外,有关指定文件分隔符斜杠的信息,请参见文件分隔符

您是否检查过您的txt文件是否存在于您的jar中?您是否在导出对话框中选择了所有需要的资源(对于普通的jar导出)?是的,我用WinRAR打开了.jar,level.txt文件就在它应该在的地方…您是否检查了您的txt文件是否存在于您的jar中?您是否在导出对话框中选择了所有需要的资源(用于正常的jar导出)?是的,我用WinRAR打开了.jar,level.txt文件就在应该的位置…我理解您所说的和我犯的错误。我对它进行了测试,编译时它仍能正常工作,但问题仍然存在。那么,您的路径就错了。你确定它不应该是“sprites/misc/level.txt”吗?我明白你说的话和我犯的错误。我对它进行了测试,编译时它仍能正常工作,但问题仍然存在。那么,您的路径就错了。你确定它不应该是“sprites/misc/level.txt”吗?