我收到以下异常
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);
并且它工作正常所以我真的不知道发生了什么!
有什么建议吗?
答案 0 :(得分: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()
。
答案 1 :(得分:1)
在您显示的代码快照中,您似乎没有初始化compile
,因此默认情况下它已初始化为null
。
您应明确创建String[]
并将其分配给compile
:
compile = new String[MY_SIZE];
如果您尝试追加错误,可能需要考虑使用dynamic array - 在java中使用ArrayList<String>
,并使用ArrayList.add(element)
附加元素
答案 2 :(得分:1)
我猜你没有初始化数组(正确)
String[] compiled = new String[size];
或者您没有设置适当的数组大小
如果您无法预测数组中有多少项。使用列表(例如ArrayList)代替
List<String> compiled = new ArrayList<String>();
Arraylists 没有大小限制。
添加项目
compiled.add(item);
答案 3 :(得分:0)
看起来你还没有初始化你的数组。
尝试这样的事情:
compile = new String[numberOfErrors];
然后将错误存储在数组中。