发生的事情是 3 秒代码正在 GUI 线程中执行,因此按钮在完成之前没有机会更新。
为了解决这个问题,启动一个SwingWorker
做长时间运行的操作;那么你在等待的时候仍然可以在 GUI 中自由地做事情。
这里有一些关于这个主题的教程SwingWorker
,上面引用的 Javadocs 也有一些代码。
示例代码
public void actionPerformed(ActionEvent e) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
// Call complicated code here
return null;
// If you want to return something other than null, change
// the generic type to something other than Void.
// This method's return value will be available via get() once the
// operation has completed.
}
@Override
protected void done() {
// get() would be available here if you want to use it
myButton.setText("Done working");
}
};
myButton.setText("Working...");
worker.execute();
}