我正在尝试在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中被调用几次。
希望有人能帮助我。