2017-06-08 55 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(); –