不要在EDT中执行任何密集的操作,否则GUI将无响应,并且您可能看不到GUI更新。您可以使用的最佳选择是
SwingWorker:
重写
doInBackground()
,并将任何长时间的操作放入此方法内,以便它将在单独的线程而不是EDT上运行。对于任何GUI创建或其中GUI组件的状态更改
doInBackground()
,请使用publish(V... chunks)
将数据发送到process(List<V> chunks)
。您需要覆盖process(List<V> chunks)
。另请注意,它process(List<V> chunks)
是在EDT上执行的。后
doInBackground()
返回时,done()
执行上EDT,你可以重写它使用它的任何GUI更新。您还可以检索返回的值doInBackground()
使用get()
。请注意,这
SwingWorker<T,V>
是通用的,您需要指定类型。T
从返回的对象的类型doInBackground()
和get()
,而V
是你传递到元素的类型process(List<V> chunks)
通过publish(V... chunks)
。execute()
方法首先调用Swing工人doInBackground()
。
有关更多信息,请阅读Swing中的并发。



