Как передать информацию в новую тему (..); - PullRequest
1 голос
/ 17 января 2011

Я проигрываю звуковой файл и создаю новый поток каждый раз, когда вызывается метод 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 ]

4 голосов
/ 17 января 2011

Просто объявите переменную final, и вы сможете использовать ее в своем анонимном внутреннем классе:

public void playSoundFile(final File file) {
   ...
3 голосов
/ 17 января 2011

Анонимные внутренние классы (например, Runnable, который вы создаете здесь) могут ссылаться на final локальные переменные из их внешней области видимости. Если вы хотите получить доступ к параметру file, измените функцию, сделав его final:

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

Теперь ваш новый Runnable может ссылаться на эту переменную без проблем.

3 голосов
/ 17 января 2011
public void playSoundFile(final File file) 

Проблема решена. Внутренние классы могут обращаться только к конечным переменным родительской функции.

Если у вас много информации, подкласс Thread или Runnable и добавьте переменные-члены.

РЕДАКТИРОВАТЬ: Какой смысл new Runnable в вашем примере? Thread уже реализует Runnable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...