0

次の例外が発生します

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Java.CompileFile.doCompilation(CompileFile.java:48)
at GUI.CompilerForm.compileBtnActionPerformed(CompilerForm.java:225)
at GUI.CompilerForm.access$400(CompilerForm.java:23)
............

CompileFile.javaの48行目にエラーはありません。配列がNULLであると言っていますが、文字列を追加しているので、理由がわかりません。

String[] compile;
int numberOfErrors = 0;
.
.
.
 for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {                
            String errors = diagnostic.getKind().toString()+" on line  "+ diagnostic.getLineNumber() +"\nIn file:  \n"+ diagnostic.toString();
            compile[numberOfErrors] = errors;
            numberOfErrors++;
        }

私はそれを設定した直後に試しSystem.out.println(errors);ました、そしてそれはうまく働いているので私は本当に何が起こっているのか分かりません!

助言がありますか?

4

4 に答える 4

4

と呼ばれる変数を宣言しましたがcompile、値が指定されていることをどこにも示していません。インスタンス変数であるとすると、その値はデフォルトで。になりますnull。次のコマンドで初期化する必要があります。

compile = new String[someSize];

someSize「十分な大きさ」はどこにありますか。

または、できれば、リストを使用することもできます。

// TODO: Rename variable to something more sensible
private final List<String> compile = new ArrayList<String>();

それから...

compile.add(errors);

numberOfErrorsそうすれば、おそらくそれもおそらく取り除くことができるでしょうcompile.size()

于 2012-05-31T14:21:29.657 に答える
1

表示されているコードスナップから、初期化されていないように見えるcompileため、デフォルトとして初期化さnullれます。

を明示的に作成し、次のString[]場所に割り当てる必要がありcompileます。

compile = new String[MY_SIZE];

エラーを追加しようとしている場合は、動的配列の使用を検討することをお勧めします。これはArrayList<String>Javaの場合であり、要素を追加するには、ArrayList.add(element)

于 2012-05-31T14:21:34.680 に答える
1

アレイを(適切に)初期化していないと思います

String[] compiled = new String[size];

または、配列の適切なサイズを設定していません

配列に含まれるアイテムの数を予測できない場合。代わりにリスト(例:ArrayList)を使用してください

 List<String> compiled = new ArrayList<String>();

アレイリストにはサイズ制限はありません。

アイテムを追加するには

 compiled.add(item);
于 2012-05-31T14:22:10.930 に答える
0

アレイを初期化していないようです。

このようなものを試してください:

compile = new String[numberOfErrors];

次に、エラーを配列に格納します。

于 2012-05-31T14:23:46.980 に答える