2017-02-11 6 views
-6

私のコンパイラから実行すると、java progeamが100%実行されます。ファイルマネージャから実行すると、プロジェクト内のdistフォルダプログラムにはwavファイルを実行するボタンがあります)ボタンはキャッチioexceptionを持っています。コンパイラから実行すると、サウンドが実行されます。もしdistフォルダから実行した場合、または移動してパラメータとしてioexceptionを持つキャッチを実行した場合私はaudioSystemを使用してexcecuteし、クリップクラスを使用しているので、例外が発生した場合、最初の方法でClipクラスがサウンドファイルを実行しようとします。コード:私のプログラムはコンパイラから100%実行してください。distから100%を実行しないでください

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/sounds"フォルダがなければ、プログラムはあなたが望むファイルを見つけられません –

答えて

0

上記では、あなたはwavファイルを検索するために相対パスを使用しています。プロジェクトのルートフォルダから 'src/azcar/sounds/.wav'を読み込みますが、 'dist/src/azcar/sounds/.wav'から効果的に読み込んでいるdistフォルダから読み込みます。

最初の手順としてフォルダの絶対パスを入力してテストを開始できます。その後、サウンドフォルダパスを変数としてアプリケーションに渡すことができます。

関連する問題