JavaFX从另一个Thread更新Canvas

时间:2016-05-15 14:12:00

标签: java multithreading canvas javafx

我正在尝试在Canvas中可视化BubbleSort。 要减慢Canvas中的绘图速度,我正在使用Thread.sleep()。 因此我需要另一个线程,因此我的GUI不会冻结。

每次迭代后,我都想更新我的Canvas。

我已经能够提出如下的半工作解决方案:

public void bubbleSort(){
    Task task = new Task() {
        @Override
        protected Object call() throws Exception {
            int n = array.length - 1;
            int temp;
            for (int i = 0; i < n; i++)
            {
                for (int j = n; j > i; j--)
                {
                    if (Integer.compare(array[j -1],array[j]) > 0)
                    {
                        temp = array[j - 1];
                        array[j - 1] = array[j];
                        array[j] = temp;

                    }
                    Platform.runLater(new Runnable() {
                         @Override public void run() {
                             drawChart();
                         }
                     });
                    Thread.sleep(sleep);    
                } 
            }
            return null;
        }
    };
    Thread t = new Thread(task);
    t.setName("sortingthread");
    t.setDaemon(true);
    t.start();
}

然而,这将使用很多Runnables向事件Queue发送垃圾邮件,我不认为这是一个很好的解决方案。 它也不是我想要的,因为循环将迭代几次,然后drawchart()方法在runnables中被调用几次。

希望有人能帮助我。

0 个答案:

没有答案