Java绘图延迟

时间:2015-03-27 15:19:03

标签: java graphics

我试图想象各种图形算法。我想这样做,每2秒后图表就会更新并重新绘制。我尝试过使用Thread.sleep()方法,但它只是冻结了GUI,然后用完整的算法完成了一段时间。

(我对Java很新,所以不要对代码苛刻) 有问题的守则:

else if(ae.getSource() == fordFulkersonButton){
    dinicButton.setEnabled(false);
    edmondsKarpButton.setEnabled(false);
    gtButton.setEnabled(false);

    if(checkbox.isEnabled()){
        fordFulkersonButton.setEnabled(false);

        while(!fordFulkerson.getIsDone()){
            flowNetwork = fordFulkerson.algoFF(flowNetwork);
            popupText.setVisible(true);

            Integer i = new Integer(flowNetwork.getCurrentFlow());
            String s = i.toString();
            popupText.setText("Aktueller Fluß: "+s);
            graphDrawer.setFlowNetwork(flowNetwork);
            this.showFrame();

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

        Integer in = new Integer(flowNetwork.getCurrentFlow());
        String st = in.toString();
        popupText.setText("Algorithmus is beendet mit Fluss: "+st);
    }
    flowNetwork = fordFulkerson.algoFF(flowNetwork);
    popupText.setVisible(true);
    Integer i = new Integer(flowNetwork.getCurrentFlow());
    String s = i.toString();

    if(fordFulkerson.getIsDone()){
        popupText.setText("Algorithmuss beednet mit maximalen Fluß: "+s);
    }else{
        popupText.setText("Aktueller Fluß: "+s);
    }
    graphDrawer.setFlowNetwork(flowNetwork);
    this.showFrame();
}

1 个答案:

答案 0 :(得分:0)

在UI线程中进行大量工作会冻结UI。如果您想制作动画或复杂的作品,请使用a worker threadSwing timer

您不得在Swing UI代码中调用Thread.sleep()。相反,你需要像动画师一样思考:一次显示一帧动画。某些外部源会调用您的代码来显示下一帧。外部源是Swing计时器。您的代码绘制下一帧并返回。这样,你永远不会阻止UI线程。

谷歌的“摇摆动画”。有趣的结果是: