问题描述
我正在制作一个非常简单的应用程序以可视化排序算法,并且我正在使用SwingWorker
每秒多次绘制数组。
如果用户按下“重置”按钮,则阵列将重新排序,现在他们可以选择再次使用哪种排序算法。
我的问题是,重置后,即使实例化了新的doInBackground()
,execute()方法也不再调用SwingWorker
。
如何做到这一点,以便我可以根据需要多次拨打execute()
?
public void actionPerformed(ActionEvent event) {
stopSort = false;
dobubbleSort = false;
doSelectionSort = false;
doInsertionSort = false;
if (event.getSource() == bubbleButton) {
dobubbleSort = true;
sort.execute();
} else if (event.getSource() == selectionButton) {
doSelectionSort = true;
sort.execute();
} else if (event.getSource() == insertionButton) {
doInsertionSort = true;
sort.execute();
} else if (event.getSource() == resetButton) {
reset();
sort.execute();
}
}
public void reset() {
displayArr.clearSwappedindexes();
displayArr.setFramesPainted(0);
displayArr.setComplete(false);
stopSort = true;
shuffleArr(arr);
sort = new Sorting(this,arr,displayArr);
}
解决方法
如果用户按下“重置”按钮,则阵列将重新排序,现在他们可以选择再次使用哪种排序算法。
else if (event.getSource() == resetButton) {
reset();
sort.execute();
}
在我看来,就像您立即执行SwingWorker一样,不会给用户提供选择排序算法的机会。因此,当用户单击排序按钮时,便已使用该工作程序。
我认为代码应该是:
else if (event.getSource() == resetButton) {
reset();
//sort.execute(); // remove
}