Я запускаю AudioInputStream в jframe. У меня есть индикатор выполнения на jframe. Я назвал jprogressbar «баром». Я пытаюсь заставить индикатор выполнения отслеживать, как далеко AudioInputStream проходит через песню. Я пробовал цикл, но каждый раз, когда я его пробовал, цикл заканчивался зависанием jframe. Затем я не могу выполнять другие задачи, такие как закрытие окна или приостановка AudioInputStream, пока песня не закончится. Может ли кто-нибудь помочь мне?
Обновление jprogress-бара
Ответы (2)
Так или иначе вам нужно обновить индикатор выполнения в EDT и продолжить обработку потока вне EDT. Один из способов сделать это — использовать SwingWorker. Вы бы выполнили обработку в doInBackground()
и обновили прогресс в publish()
. В качестве альтернативы вы можете создать свою собственную поточность и использовать SwingUtilities.invokeLater()
, когда вам нужно обновить индикатор выполнения.
person
kiheru
schedule
17.08.2013
Я узнал, что цикл должен быть реализован в потоке, отличном от 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());
}
}
}
}
person
Alan Sorrill
schedule
17.12.2014