Я запускаю AudioInputStream в jframe. У меня есть индикатор выполнения на jframe. Я назвал jproggressbar «bar». Я пытаюсь получить индикатор выполнения, чтобы отслеживать, как далеко AudioInputStream через песню. Я пробовал цикл, но каждый раз, когда я пытаюсь это сделать, цикл заканчивается тем, что заставляет замораживать jframe. Затем я не могу выполнять другие задачи, такие как закрытие окна или приостановку AudioInputStream до тех пор, пока песня не закончится. Может кто-нибудь, пожалуйста, помогите мне?Обновление jprogress-bar
0
A
ответ
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());
}
}
}
}