2017-06-08 23 views
-2

我正在创建一个使用JLabel的progressBar。问题是当我将这个标签添加到我的框架并执行一些其他任务时,我的JFrame冻结。有没有像调用和等待swing来完成绘图的方法?如何强制java绘制摆动标签?

private void jButtonOKActionPerformed(java.awt.event.ActionEvent evt) { 
    JLabel loadingBar = new JLabel("test"); 
    myFrame.add(loadingBar); 
    doSomeOtherTasks(); 
} 
+1

能否请您展现出[MCVE]仅此代码不应冻结 –

+1

当您的UI冻结时,您在https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html – GhostCat

+1

上做了错误的事情。这不是强制的问题Java通过在EDT上执行长时间运行的任务来更新标签,使其不会阻塞Event Dispatch Thread。换句话说:不要阻塞EDT(Event Dispatch Thread)。发生这种情况时,GUI将“冻结”。有关详细信息和修补程序,请参见[Swing中的并发](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

回答

2

试试这个

int delay = 1000; //milliseconds 
    ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      //...Perform a task... 
     } 
    }; 
    new Timer(delay, taskPerformer).start(); 
+1

没有任何进一步的解释,这不是太有用。 – GhostCat

+0

你的建议完美的工作,但问题是延迟时间后,它仍然冻结。 doSomeOtherTasks()方法需要将近5秒。 – hellzone

+1

您需要强制Timer停止((Timer)evt.getSource())。stop(); –