私は、GUIを使用してJavaで記述されたオーディオプレーヤーで働いています。mp3ファイルを再生するために、javazoomからJLayerライブラリを選択しました。これは、非常に人気があり、使用されていることがわかったためです。GUIを作成し、プレイリストから選択したmp3ファイルを再生することができました。
私の問題は、再生ボタンまたはプレイリストのファイルを何度も押すと、押した回数だけ曲の再生が開始され、同じスレッドで再生したいということです。もう一度再生ボタンを押すと、現在の曲の再生中に同じ曲が始まらないようにもう一度再生したい。
これがmp3ファイルを再生する私のコードです:
public class Playing implements Runnable{
private Player mp3Player;
private Thread playerThread;
public void createPlayer(FileInputStream file) throws JavaLayerException{
mp3Player = new Player(file);
playerThread = new Thread(this);
playerThread.start();
}
@Override
public void run(){
try {
mp3Player.play();
}
catch (JavaLayerException ex) {
Logger.getLogger(Playing.class.getName()).log(Level.SEVERE, null, ex);
}
}
これは、再生ボタンの私の方法です。
public void createPlayButton(){
play = new JButton();
playButton = new ImageIcon("D:/Audio Player/Images/playButton.png");
play.setBounds(125, 100, 50, 50);
play.setIcon(playButton);
play.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < select.getFilesPath().size(); i++){
if (select.getFilesPath().get(i).toString().contains(playlistBody.getSongName())){
try {
mp3Player.createPlayer(new FileInputStream(new File(select.getFilesPath().get(i).toString())));
} catch (JavaLayerException ex) {
Logger.getLogger(PlayerBody.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(PlayerBody.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
});
}
私はマルチスレッドに慣れていないので、それほど苦労しないでください。JLayerでこれができない場合は、mp3ファイルを再生できる優れたライブラリをお勧めします。よろしくお願いします。ご提案をお待ちしております。