相关疑难解决方法(0)

如果线程启动执行程序,则无法从Future <?>和SwingWorker获取ArrayIndexOutOfBoundsException

我通过使用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)

java swing exception-handling vector swingworker

20
推荐指数
2
解决办法
8356
查看次数

SwingWorker和Executor之间的差异

我正在使用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)

java swing multithreading

8
推荐指数
2
解决办法
3276
查看次数

在SwingWorker上使用done方法或更改侦听器更好吗?

我有一个任务,当完成它更新一个摇摆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)

在我的情况下没有必要提高效率,我要求更多正确的代码编写.

java user-interface swing swingworker

5
推荐指数
1
解决办法
1176
查看次数