2014-07-17 154 views
-1

我有我想執行的任務,等待一秒鐘,移動的進度條,然後執行另一項任務,等待進度條,執行程序等Java定時器 - 執行任務,等待,執行任務。沒有了Thread.sleep()

如果我使用

Thread.sleep() 

它凍結了我的GUI,不允許我的進度條移動。我曾嘗試以下幾個問題:

How to set a timer in java

Make something wait without using Thread.sleep()?

Make a java program sleep without threading

我的代碼是與此類似:

import java.util.* 

...

 Timer timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(16); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(32); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(48); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(64); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(80); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       try { 
        Runtime.getRuntime().exec("cmd /c del file"); 
       } catch (IOException ex) { 
        Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }, 1000); 
     progressBar.setValue(100); 
     progressBar.setString("Done!"); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 

      } 
     }, 1000); 
     System.exit(0); 

在此先感謝您的幫助。

Riccorbypro

+0

你需要在一個單獨的線程比你的任務 –

+0

運行GUI'凍結我的GUI,不讓我的進度條移動你需要在一個單獨的線程中實現後臺任務(包括等待)。就以[這個問題](http://stackoverflow.com/questions/2668389/java-gui-need-to-pause-a-method-without-freezing-gui-aswell) –

+0

@defaultlocale我已經嘗試了一看SwingWorker,無濟於事。我還能嘗試什麼? – Riccorbypro

回答

0

任何處理應該在一個線程發生分離到GUI線程(EDT),以確保當你調用睡在一個線程,圖形用戶界面仍然響應。 因此,無論你如何測量進度或模擬它,應該發生在與GUI不同的線程中。

看看:

Swing Workers

Progress Bars