2012-01-21 11 views
3

をリフレッシュするためにSWING + JUNGを使用して、私は私のスレッドクラスのJavaコードを次ていながら:ないコンテンツグラフの可視化

@Override  
public void run() { 

    JFrame window = new JFrame("Visualization POC"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    while (true) { 
     window.setVisible(false); 

     Layout<Node,Edge> layout = new CircleLayout<Node, Edge>(graph); 
     layout.setSize(new Dimension(300, 300)); 

     BasicVisualizationServer<Node, Edge> vv = new BasicVisualizationServer<Node, Edge>(layout); 
     vv.setPreferredSize(new Dimension(350, 350)); 
     vv.getRenderContext().setVertexFillPaintTransformer(new NodeColorTransformer()); 
     vv.getRenderContext().setEdgeDrawPaintTransformer(new EdgeColorTransformer()); 

     window.getContentPane().add(vv); 
     window.pack(); 
     window.setVisible(true); 

     try { 
      Thread.sleep(ONE_SECOND); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私はグラフの視覚化の状態をリフレッシュするためにそれを使用したいが、私は大規模な問題に捕まってしまいました。 JFrameのレイアウトと設定内容を作成するコードブロックがループ中にある場合、出力ウィンドウには表示されません。私はそれを前に置くとき、それはうまく動作しますが、それは私が望むものではありません。私はこのスレッドをメインクラスのSpringUtilities.invokeLater経由で実行します。

しばらく点滅しているため、ウィンドウがリフレッシュされていることがわかります。 私はどんなヒントも楽しみにしています。

+1

_Don't_スリープ。 _do_ [Swingの並行性](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)を参照してください。 – trashgod

+0

しかし、バックグラウンドスレッドのタスクの1つは、1秒ごとにデータを更新することです。それはループまたは何かのメインスレッドで毎秒起動する必要がありますか? – tomi891

+0

[OK]を、私はループのスレッド実行のための答えを見つけた研究の後。 2つの重要なクラス:java.utilパッケージのTimerとTimerTask – tomi891

答えて

0

EDTスレッドからコードを呼び出します。コンポーネントの更新は、EDTスレッドの最後に表示されます。あなたのスレッドは終了しません。

私はコードを少し修正しました。うまくいきます。 JLabelをあなたのjungと交換してください。

final JFrame window = new JFrame("Visualization POC"); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

最終ランダムRAN =新しいランダム();

while (true) { 


    SwingUtilities.invokeLater(new Runnable(){ 
public void run() { 
    window.setVisible(false); 

    JPanel panel = new JPanel(); 
    JLabel label = new JLabel(); 
     int nextInt = ran.nextInt(100); 
    label.setText("Test Label"+String.valueOf(nextInt)); 
    System.out.println(nextInt); 
    panel.add(label); 

    window.getContentPane().removeAll(); 
    window.getContentPane().add(panel); 
    window.pack(); 
    window.setVisible(true); 


} 

});

試み{

 Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

}

} EDTに