0

我的项目在 Eclipse 中运行得很好,但导出为可执行 jar 会导致一堆问题。.jar 不可执行,双击什么也不做。在 cmd 中的 .jar 上运行 java -jar 会产生很多 NPE,显然从 .jar 运行时的扫描仪为空。getResource 返回 null,我不知道为什么。

Scanner in = null;
    try {
        in = new Scanner(new FileReader(getClass().getResource(filename)
                .getFile()));
        readLine(in);
        in.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

在哪里filename = "../001.txt"

运行扫描仪的类在game/. 该文件001.txt是应该工作levels/的。../001.txt

这是清单在 .jar 中的样子

Manifest-Version: 1.0
Class-Path: .
Main-Class: game.Game

这是一个非常烦人的问题,谷歌搜索数小时没有提供解决方案,我之前也遇到过类似的问题,但实际上是加载相对路径而不是 NPE。

4

1 回答 1

1

getResource() 从类路径加载资源,而不是从文件系统路径加载。因此,如果 001.txt 在包级别中,您应该输入:

文件名 = "/levels/001.txt";

前导“/”代表绝对路径。如果您输入“../001.txt”,这是一个相对类路径,并在 /levels/game/../001.txt 中进行转换

于 2013-04-08T12:54:34.967 回答