2017-02-11 72 views
-6
運行100%

我的Java progeam跑,如果我從編譯器的NetBeans把運行它,如果我從文件管理器運行它,它會在DIST文件夾內的項目(100%程序有一個運行wav文件的按鈕)按鈕有一個catch ioexception如果我從編譯器運行它的聲音將運行放,如果我從dist文件夾運行它或移動然後運行它的任何路徑的捕獲​​,具有ioexception作爲參數會優先使用audioSystem,並將其與Clip類連接起來,所以如果在Clip類嘗試運行聲音文件的第一種方式中出現任何異常。代碼:我的程序運行100%,從編譯器把沒有從DIST

public void getSoundData(int delay){ 
    ActionListener taskPerformer = new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent evt){ 
     try{ 
     int random=(int)(Math.random()*12+1); 
     InputStream input = new FileInputStream("src/azcar/sounds/"+String.valueOf(random)+".wav"); 
     AudioStream audio = new AudioStream(input); 
     AudioPlayer.player.start(audio); 
     } catch (Exception exc) { 
     try { 
      Clip clip = AudioSystem.getClip(); 
      int random=(int)(Math.random()*12+1); 
      AudioInputStream input = AudioSystem.getAudioInputStream(new File("src/azcar/sounds/"+String.valueOf(random)+".wav")); 
      clip.open(input); 
      clip.start(); 
     } catch (LineUnavailableException ex) { 
      JOptionPane.showMessageDialog(null, ex); 
     } catch (UnsupportedAudioFileException ex) { 
      JOptionPane.showMessageDialog(null, "نوع ملفات الصوت غير مدعوم"); 
     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(null, "لم أتمكن من االوصول لملفات الصوت"); 
     } 
     } 
    } 
    }; 
    Timer timer = new Timer(delay*1000*60,taskPerformer); 
    timer.setRepeats(true); 
    timer.start(); 
} 
+0

不知道問題是什麼在這裏,也許您的解決方案和共享代碼的人更好地瞭解複雜的問題? –

+0

謝謝我寫的代碼 –

+0

您使用的路徑是相對的,如果沒有「SRC/AZCAR /聲音」,你移動你的可執行文件夾,該程序將無法找到你想要的文件 –

回答

0

在上面你正在使用相對路徑來查找你的wav文件。從項目的根文件夾中,您將讀取'src/azcar/sounds/.wav',但是從dist文件夾中可以有效地讀取'dist/src/azcar/sounds/.wav'。

您可以通過輸入文件夾的絕對路徑作爲第一步來開始測試。之後,您可以轉而將聲音文件夾路徑作爲變量傳遞給您的應用程序。

相關問題