此方法运行异常,我找不到原因。
private void loadTrace () {
BufferedReader reader = new BufferedReader(
new StringReader(logTextArea.getText()));
String str;
try {
while(reader != null)
{
str =reader.readLine();
String [] splitted = str.split("\\|");
String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();
String Chemin;
String Type = "action" ;
String Description;
if (d!=null) {
Description=d;
}
else Description ="Afficher onglet";
if (c!= null) {
Chemin= b+"."+c;
}
else Chemin =b;
String trace =Type+" "+Description +" "+Chemin ;
ArrayList<String> p = new ArrayList<String>();
p.add(trace);
System.out.println(p);
}
}
catch(IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
在不知道异常的情况下,我可以猜测其中一个潜在的问题是: -
String [] splitted = str.split("\\|");
String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();
您正在访问splitted
而不检查它是否为空或大小,因此如果splitted
长度小于3,您可能会遇到ArrayIndexOutOfBound异常。所以以这种方式修改代码 -
String [] splitted = str.split("\\|");
if(splitted!=null && splitted.length==3){
String b = splitted[0].trim();
String c = splitted[1].trim();
String d = splitted[2].trim();
}
答案 1 :(得分:2)
现在你已经修复了ArrayIndexOutOfBound的NullPointerException是因为你在while循环中使用的测试:
while(reader != null)
{
...
}
读者总是非空的,所以这个循环永远不会结束。你需要测试是否
reader.readLine()
返回null(表示EOF)。
答案 2 :(得分:1)
我猜你得到一个 ArrayIndexOutOfBoundException ,对吗? (你需要告诉我们,你收到的是什么异常)
问题可能在以下几行。您应该检查数组的大小,而不仅仅是“希望”它有三个部分。
String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();