【问题标题】:Stop the Player (JLayer) inside a java Thread在 Java 线程中停止播放器(JLayer)
【发布时间】:2013-05-15 14:45:12
【问题描述】:

我有一个线程来播放音频,但是当我关闭表单时,我想停止播放器播放音频文件,我的线程运行方法是:

public static Player playplayer;
public static FileInputStream fis;
public static BufferedInputStream bis;
public void run(){
   while(!Thread.currentThread().isInterrupted()){
       try{
          String file="E://Net Beans Work Space//The Imran's Regression"
            + "//src//imranregression//audio//iron man.mp3";
          fis= new FileInputStream(file);
          bis= new BufferedInputStream(fis);
          playplayer = new Player(bis);           
          playplayer.play();            
       }catch(Exception e){
             System.out.print("ERROR "+e);
       }
   } 

我阻止播放器的方法是:

  private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
  try{
      BGMusic.fis.close();
      BGMusic.bis.close();
      BGMusic.playplayer.close();      //want to close my player here
      audioplay.interrupt();   //stopping my thread here

  }catch(Exception e){

      return;
  }
}    

问题是它没有像我想要的那样停止我的线程以及停止播放音频。我怎样才能做到这一点?请帮助我提前谢谢!

【问题讨论】:

  • 这也是安卓相关的问题吗?顺便说一句 - 你为什么删除你之前的问题?
  • 首先,这不是一个与 android 相关的问题,其次,最后一个问题被忽略了,我只是想要任何关于我做错的事情的提示,以确保我做错了再加上我已经用我的代码尝试了更多,所以这次再次不安全
  • "最后一个问题被忽略了" 1) 这不是删除它的正当理由 2) 开始一个完全相同的新问题是没有意义的。 3)鉴于我花了时间整理第一个,我很生气。 4) 最后一个问题对您来说可能并不重要,但由于我是少数会关注此类问题的人之一,因此我觉得您正在损害获得答案的机会 - 根本没有。 i>
  • 对不起,安德鲁先生,请给我一个机会,它不会再发生请
  • 您必须使用布尔错字变量才能签入 while()

标签: java multithreading audio media-player


【解决方案1】:

把它写成:

 Thread audioplay=null;

正常启动线程! 那么!

    if (audioplay != null) {
        bg.Terminate();
        playplayer.close();
    try {
        audioplay.join();
    } catch (InterruptedException ex) {
        //catch the exception
    }
        System.out.print("The thread has stopped");
    }

你的 Thread 类应该有这些: 也就是说,您应该使用 volatile 布尔变量来签入 while()!

    private volatile boolean running = true;

public void Terminate() {
    running = false;
}

public void run(){
   while(running){
       try{
    String file="E://Net Beans Work Space//The Imran's Regression"
            + "//src//imranregression//audio//iron man.mp3";
         fis= new FileInputStream(file);
         bis= new BufferedInputStream(fis);
        playplayer = new Player(bis);



            playplayer.play();


}catch(Exception e){
    System.out.print("ERROR "+e);
}

   }

就是这样!你已经完全完成了!

【讨论】:

  • 是的,我忘记添加布尔变量让我检查它是否工作!等等
  • 是的,它对我来说很好,问题是我没有做正确的代码再次感谢
【解决方案2】:

移动这三行

 BGMusic.fis.close();
 BGMusic.bis.close();
 BGMusic.playplayer.close();      //want to close my player here

while 结束之后

 while(!Thread.currentThread().isInterrupted()){
    //stuff
 }

应该可以。就我而言,我更喜欢创建一个布尔值来检查线程是否应该退出并使用join() 来等待线程完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多