如何在java中降低程序的执行速度?

如何在java中降低程序的执行速度?,java,javafx,delayed-execution,Java,Javafx,Delayed Execution,我创建了一个JavaFX程序来递归地绘制Sierpinski地毯,但我希望看到递归函数的运行,也就是说,减慢程序的速度以实时地查看它的绘制。为此,我尝试了以下方法: public void pause(int sleepTime) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { System.err.println("Error in ru

我创建了一个JavaFX程序来递归地绘制Sierpinski地毯,但我希望看到递归函数的运行,也就是说,减慢程序的速度以实时地查看它的绘制。为此,我尝试了以下方法:

public void pause(int sleepTime)
{
    try
    {
        Thread.sleep(sleepTime);
    }
    catch(InterruptedException e)
    {
        System.err.println("Error in running rotation animation!");
        System.exit(-1);
    }
}
public void drawSeripinskiCarpet(GraphicsContext gc, int x, int y, int width, int height)
{
    if(width != height || width < 3)
        return;

    int size = width /= 3;
    gc.setFill(colors[index]);
    gc.fillRect(x + size, y + size, size, size);

    index++;

    if(index == colors.length)
    {
        index = 0;
    }

    pause(1);


    for(int i = 0 ; i < 3 ; i++)
    {
        for(int j = 0 ; j < 3 ; j++)
        {
            if(i == 1 && j == 1)
            {
                continue;
            }

            drawSeripinskiCarpet(gc, x + j * size, y + i * size, size, size);
        }
    }
}
然后,我在DrawSierPinski地毯函数中调用了此函数,如下所示:

public void pause(int sleepTime)
{
    try
    {
        Thread.sleep(sleepTime);
    }
    catch(InterruptedException e)
    {
        System.err.println("Error in running rotation animation!");
        System.exit(-1);
    }
}
public void drawSeripinskiCarpet(GraphicsContext gc, int x, int y, int width, int height)
{
    if(width != height || width < 3)
        return;

    int size = width /= 3;
    gc.setFill(colors[index]);
    gc.fillRect(x + size, y + size, size, size);

    index++;

    if(index == colors.length)
    {
        index = 0;
    }

    pause(1);


    for(int i = 0 ; i < 3 ; i++)
    {
        for(int j = 0 ; j < 3 ; j++)
        {
            if(i == 1 && j == 1)
            {
                continue;
            }

            drawSeripinskiCarpet(gc, x + j * size, y + i * size, size, size);
        }
    }
}

但是发生的是程序挂断几秒钟,然后直接显示在地毯上。我无法看到正在执行的程序。

对GUI的任何修改只会在返回后产生可视结果。与此同时,JavaFX无法处理任何事件并冻结,直到您的操作完成

您可以使用时间线一步一步地执行操作:使用堆栈将数据用于一次图形执行;这样,除了修改时间轴每一帧的堆栈外,还可以一次执行一个绘图操作


GUI上的任何修改只会在返回后产生可视结果。与此同时,JavaFX无法处理任何事件并冻结,直到您的操作完成

您可以使用时间线一步一步地执行操作:使用堆栈将数据用于一次图形执行;这样,除了修改时间轴每一帧的堆栈外,还可以一次执行一个绘图操作


只有在完成metgod后才能绘制。看看JavaFX中的多任务处理。我的第一直觉是时间线最适合你的需要。嗯……事实上,我是一个使用JavaFX的初学者,我几天前才开始学习,不过我会尝试在JavaFX中学习和使用动画。谢谢你的建议!无论你如何解决它,都有一些选项——你不能在ui线程中休眠,它只在metgod完成后才绘制。看看JavaFX中的多任务处理。我的第一直觉是时间线最适合你的需要。嗯……事实上,我是一个使用JavaFX的初学者,我几天前才开始学习,不过我会尝试在JavaFX中学习和使用动画。谢谢你的建议!不管你如何解决它,都有一些选择——你不能让ui线程休眠是的,它工作了,但还有其他方法吗?实际上,我还没有学习动画。@GAjeet另一种方法是在后台线程上执行定期任务并使用Platform.runLater,但这比动画方法更复杂,更容易出错。随着时间的推移,在FX线程上执行某些操作的合适且惯用的方法是使用动画。是的,它可以工作,但还有其他方法吗?实际上,我还没有学习动画。@GAjeet另一种方法是在后台线程上执行定期任务并使用Platform.runLater,但这比动画方法更复杂,更容易出错。随着时间的推移,在FX线程上执行某些操作的合适且惯用的方法是使用动画。