消息对话框未执行

时间:2017-05-02 00:21:56

标签: java

当我按下按钮时,netbeans本身会说:“线程中的异常”AWT-EventQueue-0“java.lang.IllegalArgumentException:没有行匹配接口TargetDataLine支持格式PCM_SIGNED 44100.0 Hz,16位,单声道,2字节/帧,支持big-endian。“ 当不支持该行时,它应弹出一条错误消息,提示“不支持行”。相反,没有任何反应。 我该怎么办?

public class Ouvir extends NewJFrame{

AudioFormat audioFormat;
TargetDataLine targetDataLine;
TargetDataLine line;

void captureAudio(){

          Listen.setEnabled(false);
          try{
          audioFormat = getAudioFormat();
          DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
          line = (TargetDataLine) AudioSystem.getLine(info);  
          AudioSystem.getLine(info);

          if (!AudioSystem.isLineSupported(info)) {
              String error = "Line not supported";
              JOptionPane.showMessageDialog(null,error,"+",JOptionPane.ERROR_MESSAGE);
              line.close();
          }

          line.open();
          line.start();
         }
          catch (LineUnavailableException e) {}
       }

void stopCapture(){ 

    if(line != null)
       {
       line.stop();
       line.close();
       }
    if(!Stop.getModel().isPressed())
       {
       line.stop();
       line.close();
       }
       }

private AudioFormat getAudioFormat(){


       return new AudioFormat(44100,16,1,true,true);
  }
  }

1 个答案:

答案 0 :(得分:1)

基本上你正在做的是尝试获取AudioLine,然后再检查它是否可能

AudioSystem.getLine(info);
if (!AudioSystem.isLineSupported(info)) {...

getLine抛出不受支持的异常,因为您先调用它。你需要扭转你的逻辑

if (AudioSystem.isLineSupported(info)) {
    AudioSystem.getLine(info);
} else {
    // Show error
}