这句话是什么意思

时间:2011-03-31 15:53:29

标签: java swing

unlike SwingUtilities.invokeAndWait(), the event thread is permitted to call SwingUtilities.invokeLater()。我无法理解这一点。

请帮助我。

3 个答案:

答案 0 :(得分:7)

另一个线程(不是主Swing事件线程)可以调用 invokeAndWait 来等待Swing事件线程准备好运行某些操作。但是,Swing事件线程不能等待自己。因此,它调用 invokeLater 将操作放入队列中以便以后执行。

答案 1 :(得分:3)

不是Java开发人员,我认为如果在事件线程上执行invokAndWait,它将有效地阻止自己。

答案 2 :(得分:2)

Source

invokeAndWait()方法看起来很相似,但它有三个重要的语义差异。首先,invokeLater()方法将来会在某个时间异步运行。你不知道它何时会实际运行。另一方面,invokeAndWait()方法是同步的:它在目标完成执行之前不会返回。因此,根据经验,您应该使用invokeAndWait()方法读取Swing组件的值,或者在继续执行程序之前确保屏幕上显示某些内容。否则,您可以使用invokeLater()方法。

第二个区别是invokeAndWait()方法本身不能从事件派发线程调用。运行invokeAndWait()方法的线程必须等待事件派发线程执行某些代码。没有线程,包括事件派发线程,可以等待自己做其他事情。因此,如果从事件派发线程执行invokeAndWait()方法,则会抛出java.lang.Error。这会导致事件调度线程退出(除非您采取了在代码中捕获Error对象的异常步骤);反过来,你的整个程序都被禁用了。

第三个区别是,如果线程在事件派发线程运行目标之前被中断,则invokeAndWait()方法可以抛出InterruptedException,如果Runnable对象抛出运行时异常或错误,则抛出InvocationTargetException。

-IvarD