Как остановить текущее воспроизведение песни при использовании одного потока с JLayer? - PullRequest
0 голосов
/ 10 января 2011

Недавно я использовал решение проблемы «один поток за раз», когда использовал Jlayer для воспроизведения mp3-песен на Java.Но это решение Kaleb Brasee не намекало на то, как можно остановить игрока, то есть как можно тогда вызвать player.close ()?

Код Калеба был:

Executor executor = Executors.newSingleThreadExecutor();  
executor.execute(new Runnable() { public void run() {  
 /* do something */  
} });

иэто код, который я вставил в run ()

if(player != null) player.close();  

try{  
player = new Player(new FileInputStream(musicD.getPath()));  
player.play();  
}catch(Exception e){} 

Проблема в том, что это решает проблему сохранения графического интерфейса во время воспроизведения музыки (только в одном другом потоке - что яхотел), я не могу начать играть другую песню: - (

Что я мог сделать?

Ответы [ 2 ]

0 голосов
/ 24 мая 2013

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

https://stackoverflow.com/a/16738486/2094045

0 голосов
/ 10 января 2011

Что ж, после настройки кода я понял, что замена текущего потока решает проблему; он позволяет начать играть другую песню, даже если предыдущая еще не закончена.

Это новый код:

Исполнитель-исполнитель; // член класса

Делая это каждый раз, когда вы хотите воспроизвести песню, просто заменяете поток существующей песни,
тем самым позволяя вам играть другую песню независимо от прогресса другой

executor = Executors.newSingleThreadExecutor ();
executor.execute (new Runnable () {public void run () {
/ * сделать что-то * /
}});

...