Swing是单线程事件分发机制来处理界面响应的,如果只是想等待一段时间然后刷新界面可以这样:
outPrint.setText("其他地方数据正在清空...");
EventQueue.invokeLater(new Runnable(){
Thread.sleep(3000);
outPrint.repaint();
});
如果要做一个比较耗费时间的操作,最好还是用SwingWorker类
通过SwingWorker的 doInBackground()方法处理费时间的任务,调用publish(...)把中间数据发布出来使得process方法可以接收到;
方法process(...) 来做中间数据的处理;
方法 done() 来做任务结束后的界面更新。
/**
* 假设用来更新进度条,进度条的满值为100
* @ClassName: SimActivity
* @Description: TODO
*
*/
private class SimActivity extends SwingWorker{
private int current = 0;
private int target = 0;
public SimActivity(int target){
this.target = target;
}
@Override
protected Void doInBackground() throws Exception {
//这里执行耗时的操作,例如读取文件
try{
while(current
Thread.sleep(100);
current++;
publish(current);
}
}catch(InterruptedException e){
}
return null;
}
@Override
protected void process(List chunks) {
for(Integer chunk : chunks){
//进度条设置值
processBar.setValue(chunk);
}
}
@Override
protected void done() {
//完成后的清理工作例如刷新界面或者改变某些组件的状态等
}
}