我如何才能多次致电SwingWorker?

问题描述

我正在制作一个非常简单的应用程序以可视化排序算法,并且我正在使用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
}