Java ExceptionInInitializerError-使用getResourceAsStream读取jar包中的文件

Java ExceptionInInitializerError-使用getResourceAsStream读取jar包中的文件,java,jar,java-io,Java,Jar,Java Io,我试图读取一个jar包中的文件(blip3.out)。我正在使用getResourceAsStream获取url,然后尝试从中读取。我已经多次尝试,从其他帖子中找到了解决方案,但我仍然得到了一个例外的初始化错误。请有人解释一下我做错了什么,或者问题是什么 另外,据我所知,如果我能让get资源流工作,那么它应该将blip3.out文件包含到jar包中。这是正确的吗 代码: public Set<String> readWindowTitleSet() { try {

我试图读取一个jar包中的文件(blip3.out)。我正在使用getResourceAsStream获取url,然后尝试从中读取。我已经多次尝试,从其他帖子中找到了解决方案,但我仍然得到了一个例外的初始化错误。请有人解释一下我做错了什么,或者问题是什么

另外,据我所知,如果我能让get资源流工作,那么它应该将blip3.out文件包含到jar包中。这是正确的吗

代码:

public Set<String> readWindowTitleSet() {
    try {
        InputStream is = this.getClass().getResourceAsStream("blip3.out");
        ObjectInputStream ois = new ObjectInputStream(is);
        anotherList = (HashSet<String>) ois.readObject();
        ois.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return anotherList;

}
Exception in thread "main" java.lang.ExceptionInInitializerError
at view.MainGui.<init>(MainGui.java:29)
at view.MainGui.main(MainGui.java:38)
Caused by: java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:47)
at model.WindowTitleDataStore.<init>(WindowTitleDataStore.java:18)
at controller.InterruptionDecision.<clinit>(InterruptionDecision.java:23)
... 2 more
public Set readWindowTitleSet(){
试一试{
InputStream=this.getClass().getResourceAsStream(“blip3.out”);
ObjectInputStream ois=新ObjectInputStream(is);
另一个列表=(HashSet)ois.readObject();
ois.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回另一个列表;
}
错误:

public Set<String> readWindowTitleSet() {
    try {
        InputStream is = this.getClass().getResourceAsStream("blip3.out");
        ObjectInputStream ois = new ObjectInputStream(is);
        anotherList = (HashSet<String>) ois.readObject();
        ois.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return anotherList;

}
Exception in thread "main" java.lang.ExceptionInInitializerError
at view.MainGui.<init>(MainGui.java:29)
at view.MainGui.main(MainGui.java:38)
Caused by: java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:47)
at model.WindowTitleDataStore.<init>(WindowTitleDataStore.java:18)
at controller.InterruptionDecision.<clinit>(InterruptionDecision.java:23)
... 2 more
线程“main”java.lang.ExceptionInInitializeError中的异常 MainGui.(MainGui.java:29) MainGui.main(MainGui.java:38) 原因:java.lang.NullPointerException 位于java.io.ObjectInputStream$PeekInputStream.read(未知源) 在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源) 位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源) 位于java.io.ObjectInputStream.readStreamHeader(未知源) 位于java.io.ObjectInputStream。(未知源) 在model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:47)中 位于model.WindowTitleDataStore。(WindowTitleDataStore.java:18) 在controller.interruptondecision.(interruptondecision.java:23) ... 还有两个
错误的原因很简单:您实际上将
null
作为输入流传递(查看
PeekInputStream#read
的源代码表明没有其他原因)。添加空检查并将文件移动到正确的位置,因为应用程序在运行时无法在那里找到它


(猜测不知道:将其放在源代码目录的“查看”文件夹中)

听起来像是
blip3.out
在执行时不可用。是的,将它添加到jar文件中应该可以解决问题。谢谢你的回复,但是我仍然有一些问题。我已经把它放进了每个文件夹,并尝试了不同的文件路径组合,但它找不到该文件。我的文件结构是VocabTool>src>model、view、controller。如果文件路径在src文件中,我猜应该是“/Blip3.out”,还是我遗漏了什么?