Swing Runnable с параметрами

Я хотел бы запустить новый поток Swing и передать им параметр. Что-то вроде этого:

String str;

SwingUtilities.invokeLater(new Runnable() {
public void run() {
    Play game = new Play(this.str);
        game.setVisible(true);
    }
});

Я нашел ответ, как передать параметр в поток, но не знаю, как перестроить это для моей нужды. Спасибо за идеи.


person Andrew    schedule 14.04.2013    source источник
comment
Вы можете использовать SwingWorker или создать собственный класс, который реализует Runnable и принимает параметры, которые вы хотите передать.   -  person MadProgrammer    schedule 14.04.2013
comment
Это мое первое графическое Java-приложение, и оно очень простое. Идея @trashgod работает, поэтому я не буду перестраивать свой код, но в следующий раз подумаю на ваше усмотрение :)   -  person Andrew    schedule 14.04.2013


Ответы (2)


Кроме того, ваш анонимный Runnable может получить доступ к полям final в охватывающей области:

final String str = "one";

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        Play game = new Play(str);
        game.setVisible(true);
    }
});
person trashgod    schedule 14.04.2013
comment
Пожалуйста. Для справки см. также Определение и запуск потока. - person trashgod; 14.04.2013

Вы не можете. Вместо этого создайте новый Thead.

Изменить: вот некоторый код, так как вы запутались.

import javax.swing.SwingUtilities;

public class Main {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new MyThread("StackOverflow"));
  }

  private static class MyThread extends Thread {
    String text;

    public MyThread(String text) {
      this.text = text;
    }

    @Override
    public void run() {
      System.out.println(this.text);
    }
  }
}
person Sanchit    schedule 14.04.2013
comment
Извините, но я не пробовал ваш код, но спасибо за помощь;) - person Andrew; 14.04.2013
comment
Подробнее обычно, MyRunnable implements Runnable. - person trashgod; 14.04.2013