2014-07-17 4 views
-1

У меня есть программа, в которой я пытаюсь выполнить задачу, подождать секунду, переместить индикатор выполнения, а затем выполнить другую задачу, подождать, индикатор выполнения, выполнить и т. Д.Java timer - выполнить задачу, подождать, выполнить задачу. Нет Thread.sleep()

Если я использую

Thread.sleep() 

он замораживает мой графический интерфейс, не позволяя моему индикатору хода двигаться. Я попытался следующие вопросы:

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

Вам нужно будет запустить GUI в отдельном потоке, чем ваши задачи –

+0

'замораживает мой 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

Смежные вопросы