2011-01-16 2 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 문제없이이 변수를 참조 할 수 있습니다.

관련 문제