我播放声音文件,每次调用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();
}
答案 0 :(得分:4)
只需将变量声明为final
,然后就可以在匿名内部类中使用它:
public void playSoundFile(final File file) {
...
答案 1 :(得分:3)
public void playSoundFile(final File file)
问题解决了。内部类只能访问父函数的最终变量。
如果您有大量信息,请继承Thread
或Runnable
并添加成员变量。
编辑:你的例子中new Runnable
的重点是什么? Thread
已实施Runnable
。
答案 2 :(得分:3)
匿名内部类(如您在此处创建的Runnable
)可以从其封闭范围引用final
个局部变量。如果您想要访问file
参数,请更改功能以使其final
:
public void playSoundFile(final File file) {
/* ... */
}
现在,您的新Runnable
可以毫无问题地引用此变量。