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

我猜你还没有初始化数组(正确)

String[] compiled = new String[size];

或者您没有设置适当的数组大小

如果您无法预测 数组中有多少项。改用列表(例如 ArrayList)

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

数组列表没有大小限制。

添加项目

 compiled.add(item);
于 2012-05-31T14:22:10.930 回答
1

从您显示的代码快照中,您似乎没有初始化compile,因此它被初始化null为默认值。

您应该显式创建 aString[]并将其分配给compile

compile = new String[MY_SIZE];

如果您尝试附加错误,您可能需要考虑使用动态数组- 这是ArrayList<String>java 中的一个,并附加元素,使用ArrayList.add(element)

于 2012-05-31T14:21:34.680 回答
0

看起来你还没有初始化你的数组。

尝试这样的事情:

compile = new String[numberOfErrors];

然后将错误存储在数组中。

于 2012-05-31T14:23:46.980 回答