2011-01-16 3 views
1

私はサウンドファイルを再生し、playSoundFile()メソッドが呼び出されるたびに新しいスレッドを作成します。メソッド呼び出しからの情報をスレッド内でrun()に渡す方法を知る必要があります。そのため、スレッド内で使用できます。新しいスレッド(..)に情報を渡す方法。

 public void playSoundFile(File file) {//http://java.ittoolbox.com/groups/technical-functional/java-l/sound-in-an-application-90681 
      new Thread(
        new Runnable() { 

         public void run() { 

          try { 
    //get an AudioInputStream 
    //this input stream can't use the file passed to playSoundFile() 
           AudioInputStream ais = AudioSystem.getAudioInputStream(file); 
           ... 
           } 

          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 
        }).start(); 

     } 
+1

あなたはIDEが 'file'を最終的に提案し、それを修正するべきです。 –

答えて

4

は、単純に、あなたはあなたの匿名内部クラスでそれを使用することができ、finalする変数を宣言:

public void playSoundFile(final File file) { 
    ... 
3
public void playSoundFile(final File file) 

問題は解決しました。内部クラスは、親関数の最終変数にのみアクセスできます。

多くの情報がある場合は、サブクラスThreadまたはRunnableをサブクラスし、メンバー変数を追加してください。

編集:あなたの例ではnew Runnableのポイントは何ですか? Threadは既にRunnableを実装しています。

3

ここで作成するRunnableのような匿名の内部クラスは、囲みスコープからfinalローカル変数を参照できます。あなたはfileパラメータにアクセスしたい場合は、それfinal作るために機能を変更します。

public void playSoundFile(final File file) { 
    /* ... */ 
} 

今、あなたの新しいRunnableは問題なく、この変数を参照することができます。

関連する問題