0

所以我试图编写这个类,它将解析一个文件并从中读取命令。

我希望 ctor 只打开流而不做其他任何事情。而我在其他类方法中解析文件。但是当我尝试以我制作的方法读取文件时,我得到了一个空指针异常。

帮助将被赞赏:D

public class Parser {
private BufferedReader _input;
private String _command;

public Parser(String filename) throws FileNotFoundException {
    FileInputStream fstream = new FileInputStream(filename);

    BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));
}

public boolean hasMoreCommands() throws IOException {

    String line;
    if ( (line = _input.readLine()) != null) {
        return true;
    } else {
        _input.close();
        return false;
    }
}

public void advance() throws IOException {
    String line;
    do {
        line = _input.readLine().trim();
    } while (line.equals("") || line.substring(0,2).equals(COMMENT_SIGN)); 

    String[] splittedLine = line.split(COMMENT_SIGN);
    _command = splittedLine[0];
    _command = _command.replace(" ", ""); 
}

我的主要测试+异常跟踪

public static void main(String[] args) throws IOException {
    Parser input = null;
    input = new Parser("D:\\test.asm");
    System.out.println( input.hasMoreCommands());

}

Exception in thread "main" java.lang.NullPointerException
at nand6.Parser.hasMoreCommands(Parser.java:40)
at nand6.Parser.main(Parser.java:116)
4

2 回答 2

0

看看这段代码

public Parser(String filename) throws FileNotFoundException {
FileInputStream fstream = new FileInputStream(_filename);

BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));
}

改变

BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));

_input = new BufferedReader(new InputStreamReader(fstream));

您的错误:您正在创建另一个*BufferedReader _input*类型的局部变量,因此您的类级别变量仍然为 null 导致NullPointerException

于 2013-04-19T18:21:19.307 回答
0

您基本上是在构造函数中定义一个名为“_input”的新 BufferedReader 对象。你认为在调用构造函数之后你在构造函数之外实例化了“_input”。但你不是,它指的是null。这就是你得到 NullPointerException 的原因。只需在构造函数中删除“_input”前面的“BufferedReader”,以便引用正确的对象。

于 2013-04-19T18:21:52.303 回答