Проблема запуска потока в ответ на щелчок JButton - PullRequest
1 голос
/ 22 декабря 2010

Я создал форму, которая, помимо прочего, отображает график (используя jfreechart).График отображает динамически генерируемые данные.Чтобы сгенерировать данные, я использую поток, как показано ниже:

class Grapher extends JFrame implements Runnable{
       ....
     public void run(){
           Thread thisT = Thread.currentThread();
     while(true){
        try{    
            double a = getRand();
            System.out.println(a);
            Millisecond millisecond = new Millisecond();
            if(a == 100){thisThread.stop();}
            timeseries.add(millisecond, a);
            Thread.sleep(100);
        }catch(InterruptedException e){}
    }

Если я настрою свою программу таким образом, график хорошо отображается в моем графическом интерфейсе, но запускается немедленно.* Если я пропускаю последнюю строку graph.run() и добавляю ее в прослушиватель событий Jbutton, когда я нажимаю кнопку, я вижу, что поток запускается, когда я получаю числа, отображаемые на консоли.Однако график не обновляется, и вся форма замирает.

Я не уверен, почему это происходит, но я думаю, что это связано с потоками?

Ответы [ 3 ]

1 голос
/ 22 декабря 2010
new Thread(new Grapher()).start();
1 голос
/ 22 декабря 2010

В вашем коде не должно быть цикла while.Если вы хотите какую-то анимацию, используйте Swing Timer для планирования анимации.Ссылка на учебник по Swing, на которую может ответить один из других, также содержит раздел «Как использовать таймеры».

1 голос
/ 22 декабря 2010

Вы работаете с потоком в потоке пользовательского интерфейса.

вызов .run () в runnable не создает новый поток

Посмотрите на SwingWorker для решения.http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html и прочитайте эту сумму http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

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