如果线程启动Executor,则无法从未来的<?>和SwingWorker

如果线程启动Executor,则无法从未来的<?>和SwingWorker获得ArrayIndexOutOfLimsException和SwingWorker。

我使用Executor来玩SwingWorker的多步操作,我在那里错误地识别了向量中的错误元素,看起来就像这段代码忽略了Vector中的元素一样

我的问题->如何/是否有可能以某种方式捕捉到这个异常?

简单输出

run:Thread Status with Name :StartShedule, SwingWorker Status is STARTEDThread Status with Name :StartShedule, SwingWorker Status is
 DONEThread Status with Name :StartShedule, SwingWorker Status is STARTEDThread Status with Name :StartShedule, SwingWorker Status is DONE
 Thread Status with Name :StartShedule, SwingWorker Status is STARTEDThread Status with Name :StartShedule, SwingWorker Status is DONE
BUILD SUCCESSFUL (total time: 11 seconds)

不屑一顾

//changeTableValues1(); // un-comment for get ArrayIndexOutOfBoundsException

一切都是正确的,我得到了ArrayIndexOutOf1244-异常,输出是

run:Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2
        at java.util.Vector.get(Vector.java:694)
        at KondorExport.Util.Help.Table.TableWithExecutor.changeTableValues1(TableWithExecutor.java:70)
        at KondorExport.Util.Help.Table.TableWithExecutor.access$100(TableWithExecutor.java:18)
        at KondorExport.Util.Help.Table.TableWithExecutor$2.actionPerformed(TableWithExecutor.java:61)
        at javax.swing.Timer.fireActionPerformed(Timer.java:271)
        at javax.swing.Timer$DoPostEvent.run(Timer.java:201)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
不负相思意
浏览 588回答 2
2回答

哔哔one

我认为您遇到的问题是,在后台线程中捕获的异常只有在调用时才会重新引发。get()当处理完成时。这似乎是SwingWorker常见的问题。你可以改变你的done()职能:@Overrideprotected&nbsp;void&nbsp;done()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(str.equals("StartShedule"))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;exception&nbsp;was&nbsp;thrown&nbsp;during&nbsp;processing &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}done()获取在事件分派线程上执行的命令,以便显示需要从该线程发出的任何错误消息。我希望这能帮上忙。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java