Java 运行线程以响应JButton单击时出现问题

Java 运行线程以响应JButton单击时出现问题,java,swing,Java,Swing,我制作了一个表单,其中包括显示一个图形(使用jfreechart)。该图绘制了动态生成的数据。为了生成数据,我使用了一个线程,如下所示: class Grapher extends JFrame implements Runnable{ .... public void run(){ Thread thisT = Thread.currentThread(); while(true){ try{

我制作了一个表单,其中包括显示一个图形(使用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事件侦听器中,当我单击按钮时,我可以看到线程在控制台上显示数字时运行。但是,图形不会更新,整个表单将冻结


我不知道为什么会发生这种情况,但我想这与线程有关

您正在UI线程上运行线程

对runnable调用.run()不会创建新线程

调查一下那个荡秋千的工人以寻求解决办法。
阅读这个toturial

代码中不应该有“while true”循环。如果需要某种类型的动画,请使用摆动计时器来安排动画。另一个答案的Swing教程链接也有一个关于如何使用计时器的部分。

扩展JFrame implements Runnable
看起来是一个糟糕的设计。另外,
Thread.stop
也不推荐使用。而且
run
中的
currentThread
始终是线程本身。对你的问题没有答案。是的,我的IDE告诉我停止是不推荐的。我确实调查过了。但是,我不知道如何在a==100时停止线程。谢谢你的提示:)
new Thread(new Grapher()).start();