为图形输出添加暂停

时间:2015-05-06 15:38:24

标签: java multithreading swing graphics sleep

我已经创建了一个处理有向图的程序。我还用一个栅格来显示图形。 (我还在努力清理它,虽然它应该足以显示计算结果。) enter image description here

我想在图表中暂停一下,因此在搜索过程中项目会改变颜色很明显。但是,暂停会导致图形停止。谁知道为什么会这样?说实话,我之前从未使用过Thread,我不知道它对运行进程有什么影响。 enter image description here 谢谢你的任何想法。

有问题的代码段:

public void showEdge (Raster canvas, Vertex target, Color c) {
    [...]
    canvas.setLine (x1,y2,x2,y2,c);
    try {
        Thread.sleep (1000); }
    catch (InterruptedException e) {
        System.out.println ("Problem with the pause.");
    }
}

1 个答案:

答案 0 :(得分:2)

  

然而,暂停导致图形停止。

听起来你的代码正在Event Dispatch Thread(EDT)上执行。 EDT是处理GUI上的事件处理的线程。 Thread.sleep()将睡眠EDT,这意味着GUI不能重新绘制自己,直到处理完成。

不要在EDT上使用Thread.sleep()。

相反,您需要创建一个单独的线程。您应该使用Swing Worker。 Swing Worker将为您创建单独的Thread。您可以在此线程中休眠并发布用于更新GUi的中间结果。

阅读Concurrency上Swing教程中的部分,了解有关Swing Worker的更多信息和示例。