outPrint.setText("其他地方数据正在清空...");//这个没有显示outPrint.repaint();//没用outPrint.validate();//没用try{Thread.sleep(3000);}catch(InterruptedExceptione1){e1.printStackTrace();}就是给个提示,正在清空,等一会(3000ms)
2 回答
SMILET
TA贡献1796条经验 获得超4个赞
在UI线程sleep等待,是不会刷新界面的。outPrint.setText("其他地方数据正在清空...");newThread(){publicvoidrun(){try{//sleep或做其它事情}finally{outPrint.setText("清空完毕");}}}.start();
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
Swing是单线程事件分发机制来处理界面响应的,如果只是想等待一段时间然后刷新界面可以这样:outPrint.setText("其他地方数据正在清空...");EventQueue.invokeLater(newRunnable(){Thread.sleep(3000);outPrint.repaint();});如果要做一个比较耗费时间的操作,最好还是用SwingWorker类通过SwingWorker的doInBackground()方法处理费时间的任务,调用publish(...)把中间数据发布出来使得process方法可以接收到;方法process(...)来做中间数据的处理;方法done()来做任务结束后的界面更新。/***假设用来更新进度条,进度条的满值为100*@ClassName:SimActivity*@Description:TODO**/privateclassSimActivityextendsSwingWorker{ privateintcurrent=0;privateinttarget=0;publicSimActivity(inttarget){this.target=target;}@OverrideprotectedVoiddoInBackground()throwsException{//这里执行耗时的操作,例如读取文件try{while(currentThread.sleep(100); current++;publish(current);}}catch(InterruptedExceptione){}returnnull;}@Overrideprotectedvoidprocess(Listchunks){ for(Integerchunk:chunks){//进度条设置值processBar.setValue(chunk);}}@Overrideprotectedvoiddone(){//完成后的清理工作例如刷新界面或者改变某些组件的状态等}}
添加回答
举报
0/150
提交
取消