Java Jlayer Mp3播放器 – 如何重复和停止歌曲

我很抱歉我的英语不好:)我对mp 3播放器有问题。 我正在使用jLayer。 这是我的代码

private void formWindowOpened(java.awt.event.WindowEvent evt) { new Thread (){ public void run(){ try { Player prehravac; FileInputStream buff = new FileInputStream(Okno.filename); prehravac = new Player(buff); prehravac.play(); if (prehravac != null) { prehravac.play(); } } catch(Exception e) { } } }.start(); } 

在我的应用程序中,我需要从头到尾播放歌曲。 所以当歌曲结束时我需要再次启动它,当窗口关闭时我想要停止这首歌……

有人可以帮我吗? :)我试着做了2天……我不知道如何在不同的线程中停止一些东西…谢谢你的帮助:)

JLayer不支持连续播放,所以你必须使用一个循环来重复启动新玩家。 例如:

try { do { FileInputStream buff = new FileInputStream(Okno.filename); prehravac = new AdvancedPlayer(buff ); prehravac .play(); }while(loop); } catch(Exception ioe) { //TODO error handling }

如果循环是一个布尔值,你可以在不同的方法中设置true或false,具体取决于你是想要只播放一次还是重复播放。

如果您想稍后访问该线程,您至少应该将其声明为变量。 更好的是编写一个扩展线程的单独类。 这样做可以将方法添加到稍后可以调用的线程中。

对于您的代码,它可能看起来像这样:

 import java.io.*; import javazoom.jl.player.*; public class MyAudioPlayer extends Thread { private String fileLocation; private boolean loop; private Player prehravac; public MyAudioPlayer(String fileLocation, boolean loop) { this.fileLocation = fileLocation; this.loop = loop; } public void run() { try { do { FileInputStream buff = new FileInputStream(fileLocation); prehravac = new Player(buff); prehravac.play(); } while (loop); } catch (Exception ioe) { // TODO error handling } } public void close(){ loop = false; prehravac.close(); this.interrupt(); } } 

有了这个,您可以随时随地创建线程,如下所示:

 private MyAudioPlayer thePlayer; [... some class code here...] public void yourMethod(){ thePlayer = new MyAudioPlayer("path of the music file", true); thePlayer.start(); } 

如果你想在某些时候摆脱它,请调用thePlayer.close(); 请注意,thePlayer应该是一个实例变量,因此您可以再次重用它。 如果只在方法中声明它,它将在方法完成后消失。

希望这可以帮助。