2013-08-17 2 views
0

Я запускаю AudioInputStream в jframe. У меня есть индикатор выполнения на jframe. Я назвал jproggressbar «bar». Я пытаюсь получить индикатор выполнения, чтобы отслеживать, как далеко AudioInputStream через песню. Я пробовал цикл, но каждый раз, когда я пытаюсь это сделать, цикл заканчивается тем, что заставляет замораживать jframe. Затем я не могу выполнять другие задачи, такие как закрытие окна или приостановку AudioInputStream до тех пор, пока песня не закончится. Может кто-нибудь, пожалуйста, помогите мне?Обновление jprogress-bar

ответ

5

Так или иначе вам необходимо обновить индикатор выполнения в EDT и продолжить обработку потока за пределами EDT. Один из способов сделать это - использовать SwingWorker. Вы выполнили бы обработку в doInBackground() и обновите прогресс с помощью publish(). В качестве альтернативы вы можете перевернуть свою собственную потоковую обработку и использовать SwingUtilities.invokeLater(), когда вам нужно обновить индикатор выполнения.

1

Я узнал, что цикл должен быть реализован в другом потоке из JFrame. как в,

public class Window extends JFrame{ 
     public int getMusicPosition(){ 
        //get the music positional value and return it 
     } 

     public Window(){ 
        new Thread(new BarUpdater()).start(); 
     } 

     public class BarUpdater implements Runnable{ 
        public void run(){ 
          while(true){ 
             bar.setValue(getMusicPosition()); 
          } 
        } 
     } 
}