如何多次调用 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
}