因为某些原因,我需要用java播放MP3,结果百度到可以用jmf,但是当音乐播放完后,线程还是没有退出,请问要怎么弄才能使音乐播放完后线程就退出。代码如下:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;public class MP3Player {    public static void main(String[] args) throws NoPlayerException,
MalformedURLException, IOException {
        String fileName = "music/sound1.mp3";
        if(args != null && args.length>0){
            fileName = args[0];
        }
        final Player player = Manager.createPlayer(new File(fileName).toURI().toURL());
        player.prefetch();
        player.start();//开始后该线程没有退出,而我需要它退出
        //player.close();
    }
}

解决方案 »

  1.   

    改了下
    import java.io.File;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.WeakHashMap;import javax.media.Manager;
    import javax.media.NoPlayerException;
    import javax.media.Player;public class MP3Player { public static void main(String[] args) throws NoPlayerException,
    MalformedURLException, IOException, InterruptedException {
    String fileName = "F:/TDDOWNLOAD/芊芊-回音哥.mp3";
    if (args != null && args.length > 0) {
    fileName = args[0];
    }
    final Player player = Manager.createPlayer(new File(fileName).toURI()
    .toURL());
    player.prefetch();
    player.start();// 开始后该线程没有退出,而我需要它退出
    Thread.sleep(2000);
    while (true) {
    System.out.println(player.getState());
    if(player.getState()==500){
    player.close();
    break;
    }
    }

    }
    }
      

  2.   

    谢谢你,但是为什么getState()状态是600和500呢?
      

  3.   

    Player类有六个状态Unrealized = 100;
    Realizing = 200;
    Realized = 300;
    Prefetching = 400;
    Prefetched = 500;
    Started = 600;start()之前即Prefetch()之后出于Prefetched 状态,start之后出于Started 状态,当音乐结束后回到Prefetched 状态,只要判断是否为Prefetched 状态就可以了,至于这些状态转换含义,你自己百度吧