Отправить несколько экземпляров задачи JavaFX исполнителю - PullRequest
0 голосов
/ 18 октября 2018

У меня есть task, в котором мне нужно запускать x фоновых потоков y раз после нажатия кнопки запуска.

Мне нужно иметь возможность отменить все потоки, нажав кнопку отмены, или позволить потокам работать до тех пор, пока все они не завершат, а затем отправить кнопку отмены программно.

Мне также нужно иметь возможность вернутьсястрока из задачи, чтобы я мог обновить TableView.

Как мне сделать эту работу со службой-исполнителем, чтобы я мог отправить несколько потоков, определенных как x, и иметь возможность нажать кнопку остановки, чтобы отменить все потоки, запущенные в данный момент, но при этом позволить кнопке запускаударить снова?

В прошлом я делал:

Кнопка запуска:

 public void handleStartButton(ActionEvent event) {
        if(task != null) {
            System.out.println("Task already running");
            return;
        }
        task = new Task<Void>() {
            @Override
            protected Void call() {
                new LongTask().start(this, "Data to use");
                //fire cancel button here..
                return null;
            }
        };
        Thread thread = new Thread(task);
        thread.setDaemon(true);
        thread.start();
    }

Кнопка отмены:

public void handleStopButton(ActionEvent event) {
            if(task == null) {
                System.out.println("Task not running");
                return;
            }
            System.out.println("Stop Pressed");
            task.cancel();
            task = null;
      }

Задача запускается несколько раз:

public class LongTask {
    public void start(Task<Void> task, String Data) {
        while (!task.isCancelled()) {
            System.out.println("Running test");
            try {
                Thread.sleep(5000);
                System.out.println(Data);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("Test run ended");
        }
        System.out.println("Canceling...");
        System.out.println("Stop Pressed");
        return;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...