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