问题是,您长期运行的任务正在阻塞使GUI保持响应状态的线程。
您需要做的是将长期运行的任务放在另一个线程上。
一些常用的方法是使用Timers或
SwingWorker。
在Java教程有很多关于这些东西在他们的并发教训的信息。
要确保第一个任务在第二个任务之前完成,只需将它们都放在同一线程上即可。这样,您不必担心保持两个不同的线程正确计时。
这是您的情况的SwingWorker的示例实现:
public class YourTaskSwingWorkerSwingWorker extends SwingWorker<List<Object>, Void> { private List<Object> list public YourClassSwingWorker(List<Object> theOriginalList){ list = theOriginalList; } @Override public List<Object> 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并告诉它启动。



