我的问题与SwingUtilities.invokeLater
。我什么时候应该使用它?每次需要更新GUI组件时都需要使用吗?它到底是做什么的?因为它听起来不直观并且添加了看似不必要的代码,所以有替代方法吗?
每次需要更新GUI组件时都需要使用吗?
不,如果您已经在事件分配线程(EDT)上,则不是这样,当响应用户发起的事件(例如单击和选择)时,情况总是如此。(actionPerformed方法等始终由EDT调用。)
但是,如果您不在 EDT上并且想要进行GUI更新(如果您想从某个计时器线程或某些网络线程等更新GUI),则必须安排由EDT执行更新。这就是这种方法的目的。
摆动基本上是线程不安全的。即,与该API的所有交互都需要在单个线程(EDT)上执行。如果需要从另一个线程(计时器线程,网络线程等)进行GUI更新,则需要使用您提到的方法(SwingUtilities.invokeLater,SwingUtilities.invokeAndWait等)。