/**
 *  此方法需要用到第三方jar包   我这用到tritonus_share-0.3.6.jar
 **/

private static final int EXTERNAL_BUFFER_SIZE = 128000;
  public static void main(String[] args){  
   play("D:\\Backup\\ALARM8.WAV");   //可以放到while里面循环播放音乐
}
 /**
  * 播放音频文件   支持音频格式   wav  mid  aif,此方法不支持mp3  wma  au
  *@param strFileName 文件路径
  */
   public static void play(String strFilename){
                
    if (strFilename.length() <= 0)
    {
     printUsageAndExit();
    }   
    //把声音文件 放到文件对象里
    File soundFile = new File(strFilename);
   
    //读出这个声音文件
    AudioInputStream audioInputStream = null;
    try
    {
     audioInputStream = AudioSystem.getAudioInputStream(soundFile);
    }
    catch (Exception e)
    {   //如果读取文件失败,则抛出这个异常
     e.printStackTrace();
     throw new MonitorException(e.getMessage());
    }   //从这个audioInputStream流数据得到java能解读的声音格式
    AudioFormat audioFormat = audioInputStream.getFormat();   //通过audioFormat格式得到正常播放的数据line
    SourceDataLine line = null;
    DataLine.Info info = new DataLine.Info(SourceDataLine.class,
               audioFormat);
    try
    {
     line = (SourceDataLine) AudioSystem.getLine(info);    //得到了数据line后,line还没准备好接受音频数据, 这里调用open 接收音频数据
     line.open(audioFormat);
    }
    catch (LineUnavailableException e)
    {
     e.printStackTrace();
     System.exit(1);
    }
    catch (Exception e)
    {
     e.printStackTrace();
     System.exit(1);
    }   //line现在已经能接受数据了,但是还不能通过音频设备播出, 这里调用start 激活音频设备
    line.start();   //这里把音频流读到缓存中,然后写到line中播放
    int nBytesRead = 0;
    byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
    while (nBytesRead != -1)
    {
     try
     {
      nBytesRead = audioInputStream.read(abData, 0, abData.length);
     }
     catch (IOException e)
     {
      e.printStackTrace();
     }
     if (nBytesRead >= 0)
     {
      int nBytesWritten = line.write(abData, 0, nBytesRead);
     }
    }   //等待所有的数据都播放完
    line.drain();   //关闭line
    line.close();
      }
   
   private static void printUsageAndExit()
   {
    System.exit(1);
   }