我仿照书上例子写了一个发出声音的java程序,并且能在命令行里成功运行。可运行成功后,程序没自动结束,不能再输入其他的命令。我想请教一下在这种情况下,怎么结束正在运行的java程序。以下是程序代码和运行的截图!!程序代码:(该程序功能为发出一声弹钢琴的声音,没有任何的输出)import javax.sound.midi.*;
public class MiniMiniMusicApp {
  public static void main(String[] args) {
    MiniMiniMusicApp mini = new MiniMiniMusicApp();
    mini.play();
  }
  
  public void play(){
    try{zhuge
      Sequencer player=MidiSystem.getSequencer();
      player.open();
      Sequence seq=new Sequence(Sequence.PPQ,4);
      
      
      Track track=seq.createTrack();
      
      ShortMessage a=new ShortMessage();
      a.setMessage(144,1,44,100);
      MidiEvent noteOn=new MidiEvent(a,1);
      track.add(noteOn);
      
      ShortMessage b=new ShortMessage();
      b.setMessage(128,1,44,100);
      MidiEvent noteOff=new MidiEvent(b,100);
      track.add(noteOff);
      
      player.setSequence(seq);
      
      player.start();
    }
    catch(Exception ex){
      ex.printStackTrace();
    }
  }
}运行时截图:

解决方案 »

  1.   

    图看不见,你直接在任务管理器里面结束java.exe进程就可以了.
      

  2.   

    taskkill /f /im java.exe
      

  3.   

    Ctrl+C结束当前正执行的命令。任务管理结束也可以了
      

  4.   

    执行完(播放完),想停止直接在控制台为当前窗口的情况下按“Ctrl + C”.
    或者在程序中mini.play();之后用一句System.exit();
    顺便问一句,你用的是什么API版本?1.6么?
      

  5.   


    第一种方法可以。至于第二种方法我刚才就已经试了,加了System.exit(0); 虽然可以结束程序,但程序执行的时候却不能发出声音了,不知道为什么??我用的api是1.5的。现在有1.6的api吗?
      

  6.   

    Ctrl+C结束当前正执行的命令。
      

  7.   

    既然声音是一个线程 那就在主线程中写个循环管理
    等待输入
    如果输入是 'Q' 就关闭声音线程 结束应用大致就这样
    void main(...){
       player.start();
       while(read()!='q'){
       }
       player.exit();
    }
      

  8.   

    如果用命令行的话,如果出现死循环都是用Ctrl+c就可以结束java程序了。
      

  9.   

    那在调用了player.start()方法后面加了System.exit(0)后,程序可以结束了,但程序执行的时候却不能发出声音了。这是因为什么啊???