我制作了一个表格,其中包括显示图表(使用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){}
}
如果我像这样设置我的程序,图表在我的GUI中显示正常,但立即开始。
Grapher graph = new Grapher();
MyForm testForm = new MyForm();
testForm.addGraph(graph);
testForm.pack();
testForm.setVisible(true);
graph.run();
如果我错过了最后一行graph.run()
并将其添加到Jbutton事件监听器,当我单击该按钮时,我可以看到该线程在我在控制台上显示数字时运行。但是,图表不会更新,整个表单会冻结。
我不确定为什么会这样,但我想它与线程有关?
答案 0 :(得分:1)
您正在UI线程上运行该线程。
在runnable上调用.run()不会创建新线程
查看SwingWorker是否存在问题。 http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html 并阅读这篇文章http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
答案 1 :(得分:1)
new Thread(new Grapher()).start();
答案 2 :(得分:1)
您的代码中不应该有“while true”循环。如果你想要某种动画,那么使用Swing Timer来安排动画。另一个答案之一的Swing教程链接还有一个关于如何使用计时器的部分。