0

そのため、ファイルを解析してそこからコマンドを読み取るこのクラスを作成しようとしています。

私は、ctor がストリームを開くだけで、他に何もしないことを望んでいます。他のクラスメソッドでファイルを解析している間。しかし、作成したメソッドでファイルを読み取ろうとすると、nullpointerexception が発生します。

ヘルプが承認されます: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

基本的に、コンストラクター内で「_input」と呼ばれる新しい BufferedReader オブジェクトを定義しています。コンストラクターを呼び出した後、コンストラクターの外側で「_input」をインスタンス化すると思います。しかし、そうではありません。null を指します。そのため、NullPointerException が発生しています。正しいオブジェクトを参照するには、コンストラクター内の「_input」の前にある「BufferedReader」を削除するだけです。

于 2013-04-19T18:21:52.303 に答える
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 に答える