从BufferedReader读取时的NullPointerException,仅在作为jar运行时

时间:2015-07-20 10:49:47

标签: java

我正在尝试从位于src > Truss > xml的文件夹中读取某些xml文件的名称。主类位于Truss目录中。当程序从eclipse运行时它会读取文件,但是在导出到jar并运行时会抛出此错误:(此错误是从cmd复制的,而不是eclipse控制台)

java.lang.NullPointerException
        at java.io.FilterInputStream.read(Unknown Source)
        at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
        at sun.nio.cs.StreamDecoder.read(Unknown Source)
        at java.io.InputStreamReader.read(Unknown Source)
        at java.io.BufferedReader.fill(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at Truss.main.initiate(main.java:167)
        at Truss.main.<init>(main.java:729)
        at Truss.main.main(main.java:110)

以下是代码:

try {
    InputStream in = main.class.getResourceAsStream("xml");
    BufferedReader input = new BufferedReader(new InputStreamReader(in));

    String profileName;

    while((profileName = input.readLine()) != null) {
        loadProfile(profileName.substring(0, profileName.length() - 4));
    }

} catch (Exception e) {
    e.printStackTrace();
}

while循环的构造函数是第167行。

2 个答案:

答案 0 :(得分:1)

显然getResourceAsStream()返回null,你没有检查它。

请求的资源不在该名称下的JAR文件中。

答案 1 :(得分:0)

根据您显示的信息,我只能猜测您没有在jar中正确打包资源文件。请看一下这个related question。请注意,资源文件夹应位于src文件夹(其中包含.java文件)下,而不是构建文件夹(.class文件)。

<强>更新

注意到你的“xml”实际上是一个文件夹,你不能使用getResourceAsStream()。 This answer显示了一种枚举jar条目的方法,可能是你的解决方案。