我是一个使用java的OOP的新手,我正在学习,在这个社区的帮助下。
我已经构建了一个程序,它使用一个对象来重复一次又一次从excel表读取的任务,并从那里提取数据。
我想知道一遍又一遍地初始化此任务的最佳做法是什么,所以我不会在数组和其他变量错误上获得越界索引?
这是我用来刷新gui的线程代码(以及一遍又一遍的文件读取)。正如你所看到的,它正在调用来自不同类的一些方法。调用此方法时 - 局部变量和索引数组已经保留了前一次迭代的一些数据:
public void check() {
Thread check = new Thread() {
public void run() {
for (;;) {
EventQueue.invokeLater(new Runnable() {
public void run() {
// Update GUI here on EventQueue.
try {
Task.readTasks();
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
label.setText("Next Task Is: " + Task.printNextTask);
}
});
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {
break;
}
if (killcheck)
break;
}
}
};
check.start();
}
public void stopChecking() {
killcheck = true;
}
}
答案 0 :(得分:1)
你的问题很通用,所以我担心我的答案也非常通用。为了帮助避免使用ArrayIndexOutOfBoundsExceptions,请尽可能在数组和for-each对象上使用简明Iterable语法。
也许你会发现this answer对工作队列的问题很有帮助。
答案 1 :(得分:1)
根据您对数组的使用情况,您应该查看以下类: http://docs.oracle.com/javase/6/docs/api/index.html?java/util/ArrayList.html
http://docs.oracle.com/javase/6/docs/api/java/util/Vector.html
http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html
除非你想要一个基本类型数组(int,double,char等),否则通常不鼓励使用“旧样式”数组。