这句话是什么意思

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

请帮帮我。

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

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

资源

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

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

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

-IvarD