2017-05-02 44 views
0

当我按下按钮时,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); 
    } 
    } 
+0

你在测试之前得到AudioLine是否支持 – MadProgrammer

+0

我该如何解决这个问题?没有完全获得 –

+0

您需要在AudioSystem.getLine(info)之前调用'AudioSystem.isLineSupported(info)',否则,你怎么知道它是否可以被支持 – MadProgrammer

回答

1

你在做什么基本上是试图检查,看看是否有可能

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

getLine抛出不受支持的例外,因为你先叫之前得到AudioLine。你需要扭转你的逻辑

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