0

当我在 netbeans 之外运行这段代码时,我得到一个空指针异常。我正在尝试读取 .DAT 文件。在netbeans中工作正常。我已经检查了很多次路径,它绝对是正确的。是否应该使用类加载器或类似的东西?

static String fileName = "src/frogger/highScores.DAT";
try {
        //Make fileReader object to read the file
        file = new FileReader(new File(fileName));
        fileStream = new BufferedReader(file);

    } catch (Exception e) {
        System.out.println("File not found");
    }

我在想像这样与图像一起使用的东西,但它不起作用。

 file = new FileReader(new File(this.getClass().getResource(fileName)));

或者

file = new FileReader(this.getClass().getResource(fileName));

错误

Microsoft Windows [Version 6.1.7601]

版权所有 (c) 2009 Microsoft Corporation。版权所有。

C:\Users\Michael>java -jar "C:\Users\Michael\Documents\NetBeansProjects\Frogger\
dist\Frogger.jar"
File not found
Exception in thread "main" java.lang.NullPointerException
        at frogger.Board.readFile(Board.java:519)
    at frogger.Board.gameInit(Board.java:154)
    at frogger.Board.addNotify(Board.java:111)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at javax.swing.JRootPane.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at java.awt.Window.addNotify(Unknown Source)
    at java.awt.Frame.addNotify(Unknown Source)
    at java.awt.Window.show(Unknown Source)
    at java.awt.Component.show(Unknown Source)
    at java.awt.Component.setVisible(Unknown Source)
    at java.awt.Window.setVisible(Unknown Source)
    at frogger.Window.<init>(Window.java:16)
    at frogger.Window.main(Window.java:22)

该文件位于 netbeans 上的 frogger 包中。

4

1 回答 1

0

如果您的代码已部署,您的代码指的是不应再存在的 src 文件夹。访问资源的正确方法是

// no src/ in the resource name
InputStream is=getClass().getResourceAsStream("/frogger/highScores.DAT");
fileStream = new BufferedReader(new InputStreamReader(file));

您的 IDE 通常将资源从 src 复制到生成的类文件的位置。但是,如果您部署应用程序,则必须注意文件是否与它一起打包。

如果 frogger 与您的课程的包名称匹配,您可以进行相对查找

InputStream is=getClass().getResourceAsStream("highScores.DAT");

请注意,NullPointerException 在您捕获 IOException 时自然而然地出现,然后继续处理,因为未初始化的 Reader 没有发生任何事情。您应该确保在分配失败时不执行处理资源的代码。

但是对于诸如高分之类的事情,您应该考虑使用 Preferences API,它为您提供独立于应用程序位置的持久存储。

于 2013-08-28T10:36:53.000 回答