如何将信息传递给新的Thread(..);

时间:2011-01-16 22:05:50

标签: java multithreading audio

我播放声音文件,每次调用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();

        }

3 个答案:

答案 0 :(得分:4)

只需将变量声明为final,然后就可以在匿名内部类中使用它:

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

答案 1 :(得分:3)

public void playSoundFile(final File file) 

问题解决了。内部类只能访问父函数的最终变量。

如果您有大量信息,请继承ThreadRunnable并添加成员变量。

编辑:你的例子中new Runnable的重点是什么? Thread已实施Runnable

答案 2 :(得分:3)

匿名内部类(如您在此处创建的Runnable)可以从其封闭范围引用final个局部变量。如果您想要访问file参数,请更改功能以使其final

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

现在,您的新Runnable可以毫无问题地引用此变量。