Как я могу вызвать SwingWorker более одного раза?

#java #swing #swingworker

#java #swing #swingworker

Вопрос:

Я создаю очень простое приложение для визуализации алгоритмов сортировки и использую SwingWorker для рисования массива несколько раз в секунду.
Если пользователь нажимает кнопку «Сброс», массив повторно перетасовывается, и теперь он может выбрать, какой алгоритм сортировки использовать снова.

Моя проблема в том, что после сброса метод 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);
}
  

Ответ №1:

Если пользователь нажимает кнопку «Сброс», массив перетасовывается заново, и теперь он может выбрать, какой алгоритм сортировки использовать снова.

 else if (event.getSource() == resetButton) {
    reset();
    sort.execute();
}
  

Мне кажется, что вы немедленно запускаете SwingWorker и не даете пользователю возможности выбрать алгоритм сортировки. Итак, когда пользователь нажимает кнопку сортировки, рабочий уже использовался.

Я бы подумал, что код должен быть:

 else if (event.getSource() == resetButton) {
    reset();
    //sort.execute(); // remove
}
  

Комментарии:

1. Это работает, и теперь я чувствую себя глупо, потому что я этого не видел… ну что ж. Спасибо!