2015-01-20 2 views
0

Я работаю над небольшим звуковым проигрывателем, который играет песни. Я использую библиотеку TinySound https://github.com/finnkuusisto/TinySound. И, как я вижу из API, в нем есть метод под названием .done(), который говорит мне, что музыкальный объект закончен, или нет, но как я могу проверить его во время игры?Как узнать, когда песня закончена?

В настоящее время я создал JFrame с кнопками и Jlist, который отображает песни, но я понимаю, что если я попробую какой-то цикл while, чтобы прослушать или нет, песня закончена, я не смогу использовать другую кнопки, такие как остановка, пауза и т.д.

я думал где-то вдоль этой линии (псевдо-код):

while(theSong.playing()){ 
    if(theSong.done()){ 
     playNext(); 
    } 
} 

проблема заключается в том, что при входе в то время цикла, я не могу использовать любые другие функции в моей программе. Если кто-то хочет увидеть пример кода, пожалуйста, дайте мне знать!

Sindre M

+1

звучит, как вы, возможно, потребуется создать отдельный тему или что-то ... – xdhmoore

+0

Я никогда не использовал темы, но если кто-нибудь объяснить, или ссылку на какой-то учебнике я было бы очень признательно! –

+1

Пример простой нити: http://stackoverflow.com/questions/2531938/java-thread-example –

ответ

0

Запуск этого while на том же потоке, что и ваш GUI сделает интерфейс застрял. Вы можете достичь желаемой функциональности с помощью метода SwingUtilities invokeAndWait:

SwingUtilities.invokeAndWait(new Runnable() { 
    public void run() { 
     while(theSong.playing()) { 
      if(theSong.done()) { 
       playNext(); 
      } 
     } 
    } 
} 
+0

Могу ли я предоставить SwingUtilities для этого конкретного события или мне нужно предоставить метод run() для всего приложения? Просто думаешь, что, поскольку все остальное работает по желанию? –

+0

@SindreMoldeklev, вы можете использовать его всякий раз, когда вы собираетесь выполнять что-то, что в противном случае запустило бы поток Swing. Это часто используется с панелью выполнения, чтобы выполнить что-то на заднем плане при обновлении завершения панели. –

+0

Я попробую! Большое спасибо. –

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