如何多次调用 SwingWorker?
How can I call SwingWorker more than once?
我正在制作一个非常简单的应用程序来可视化排序算法,我正在使用 SwingWorker
每秒多次绘制数组。
如果用户按下 'reset' 按钮,数组将重新洗牌,他们现在可以再次选择要使用的排序算法。
我的问题是重置后,execute() 方法不再调用 doInBackground()
,即使在实例化新的 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);
}
If a user presses the 'reset' button, the array is re-shuffled and they can now choose which sorting algorithm to use again.
else if (event.getSource() == resetButton) {
reset();
sort.execute();
}
在我看来,您立即执行 SwingWorker 并且不给用户 select 排序算法的机会。所以当用户点击排序按钮时,worker已经被使用了。
我认为代码应该是:
else if (event.getSource() == resetButton) {
reset();
//sort.execute(); // remove
}
我正在制作一个非常简单的应用程序来可视化排序算法,我正在使用 SwingWorker
每秒多次绘制数组。
如果用户按下 'reset' 按钮,数组将重新洗牌,他们现在可以再次选择要使用的排序算法。
我的问题是重置后,execute() 方法不再调用 doInBackground()
,即使在实例化新的 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);
}
If a user presses the 'reset' button, the array is re-shuffled and they can now choose which sorting algorithm to use again.
else if (event.getSource() == resetButton) {
reset();
sort.execute();
}
在我看来,您立即执行 SwingWorker 并且不给用户 select 排序算法的机会。所以当用户点击排序按钮时,worker已经被使用了。
我认为代码应该是:
else if (event.getSource() == resetButton) {
reset();
//sort.execute(); // remove
}