我通过使用Executor玩SwingWorker的多线程,我在那里错误地从Vector中识别出错误的元素,看起来像这个代码相当忽略了Vector中的元素不存在
我的问题 - >如何/有可能以某种方式捕获此异常
简单的输出
run:
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
BUILD SUCCESSFUL (total time: 11 seconds)
Run Code Online (Sandbox Code Playgroud)
通过取消注释
//changeTableValues1(); // un-comment for get ArrayIndexOutOfBoundsException
Run Code Online (Sandbox Code Playgroud)
一切都正确,我得到ArrayIndexOutOfBoundsException并输出
run:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: …Run Code Online (Sandbox Code Playgroud) 我正在使用SwingWorker在我正在制作的应用程序上执行一些重载任务.虽然今天我遇到了Executor类和这个例子:
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() {
someTask();
});
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么会使用SwingWorker而不是上面的例子吗?这是我目前使用SwingWorker的方式:
SwingWorker worker = new SwingWorker() {
protected Object doInBackground() {
someTask();
return null;
}
};
worker.execute();
Run Code Online (Sandbox Code Playgroud) 我有一个任务,当完成它更新一个摇摆GUI告诉已完成.我看到的是你可以使用done()方法或附加a PropertyChangeListener并监听done状态的变化.
什么是更好的使用,为什么?或者他们是一样的吗?
例如,这个:
public class Foo implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
if ("state".equals(evt.getPropertyName())
&& (SwingWorker.StateValue.DONE.equals(evt.getNewValue()))) {
this.updateTheGuiAndOtherThings();
}
}
}
Run Code Online (Sandbox Code Playgroud)
或这个:
public class W extends SwingWorker {
protected Boolean doInBackground() throws Exception {...}
protected void done() {
otherClass.updateTheGuiAndOtherThings();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下没有必要提高效率,我要求更多正确的代码编写.