2010-12-22 11 views
1

我已經作出了形式,除其他事項外,顯示(使用jfreechart的)的曲線圖。該圖繪製了動態生成的數據。要生成我使用一個線程的數據,如下所示:問題響應於一個JButton運行的線程單擊

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){} 
    } 

如果設置我的計劃是這樣,圖形顯示我的GUI內罰款,但會立即啓動。

 Grapher graph = new Grapher(); 
    MyForm testForm = new MyForm(); 

    testForm.addGraph(graph);  
    testForm.pack(); 
    testForm.setVisible(true); 
    graph.run(); 

如果我錯過了最後一行graph.run(),這增加了JButton的事件監聽器,當我按一下按鈕,我可以看到線程運行,因爲我得到顯示控制檯上的數字。但是,圖表不會更新,整個表格會凍結。

我不知道爲什麼發生這種情況,但我想它與線程呢?

+1

'延伸的JFrame實現Runnable`看起來像一個糟糕的設計。此外,`Thread.stop`已棄用。 `run`中的`currentThread`總是線程本身。雖然沒有回答你的問題。 – khachik 2010-12-22 17:35:06

回答

1
new Thread(new Grapher()).start(); 
1

你不應該在你的代碼「而真正的」循環。如果您想要某種動畫,請使用Swing Timer來安排動畫。通過其他答案之一的Swing教程鏈接也有關於如何使用計時器的章節。