小编典典
问题是,您长期运行的任务正在阻塞使GUI保持响应状态的线程。
您需要做的是将长期运行的任务放在另一个线程上。
一些常用的方法是使用Timers或SwingWorker。
在Java教程有很多关于这些东西在他们的并发教训的信息。
要确保第一个任务在第二个任务之前完成,只需将它们都放在同一线程上即可。这样,您不必担心保持两个不同的线程正确计时。
这是您的情况的SwingWorker的示例实现:
public class YourTaskSwingWorkerSwingWorker extends SwingWorker, Void> {
private List list
public YourClassSwingWorker(List theOriginalList){
list = theOriginalList;
}
@Override
public List doInBackground() {
// Do the first opperation on the list
// Do the second opperation on the list
return list;
}
@Override
public void done() {
// Update the GUI with the updated list.
}
}
要使用此代码,当触发修改列表的事件时,请创建一个新的SwingWorker并告诉它启动。
2020-09-08