• Как заставить кнопку в JavaFX ничего не делать?

    @MicroKlizma Автор вопроса
    сергей кузьмин, я попробовал это
    Сначала я сделал без runLater. Нажатие на кнопку вызывает метод action внутри контроллера:
    public void action() throws InterruptedException {
            MyThread mt = new MyThread();
            Thread thread = new Thread(mt);
            thread.start();
        }
    
        class MyThread implements Runnable {
            @Override
            public void run() {
                buttonClicked();
            }
    
        }

    И все прекрасно работает. Я добился того, чего нужно. В buttonClicked в начале и конце я меняю button.setDisable на true и false соответственно. И когда я делаю клики, кнопка не реагирует на них, пока buttonClicked() не завершит работу
    Но проблема в том, что после первого нажатия у меня только один раз выскакивает
    Exception in thread "Thread-3" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-3
    Естественно исключение это плохо, от него нужно избавляться, для этого как раз в гугле говорят использовать Platform.runLater(). Таким образом, я переделал метод run()
    @Override
            public void run() {
                Platform.runLater( () -> buttonClicked() ) ;
            }

    После него исключения не возникает, но код не работает так, как работал без runLater. Я снова могу нажимать на кнопку сколько угодно раз и нажатия будут как бы накапливаться, пока все методы, которые нажатие вызвало, не выполнятся
  • Как заставить кнопку в JavaFX ничего не делать?

    @MicroKlizma Автор вопроса
    Орхан Гасанлы, мне предлагали это решение в ответах, я попробовал и в комментах написал что это не сработало, в итоге ответ удалили. Ни флаг ни setDisable у меня не работают.
    После button.setDisable(true) я вывожу в консоль button.isDisable и выводится true. Затем тред засыпает, я в это время спамлю кнопку и она все равно нажимается, после того как тред просыпается все эти true выводятся
  • Как заставить кнопку в JavaFX ничего не делать?

    @MicroKlizma Автор вопроса
    сергей кузьмин, я написал что это не помогает
  • Как заставить кнопку в JavaFX ничего не делать?

    @MicroKlizma Автор вопроса
    Nurik,
    Допустим, при нажатии на кнопку вызывается метод:
    public void action() throws InterruptedException {
            System.out.println("action");
            Thread.sleep(5000);
        }

    После вывода текста в консоль, я жму на кнопку 5 раз, до того как тред засыпает на 5 секунд (имитация длительного выполнения кода). После того, как он просыпается, все мои 5 нажатий все равно обрабатываются. Я накликал по кнопке в тот момент, когда выполнялся метод, и после него будут выполняться остальные методы, то есть еще 5 раз выведется слово action в консоль, хотя тред в момент кликов, казалось бы, ничего не обрабатывал
    Как сделать так, чтобы пока выполняется код (в данном случае, пока выполняется Thread.sleep), я нажимал на кнопку сколько угодно раз, и после того, как код первого нажатия, первого метода закончил выполняться (тред проснулся), у меня не выполнялись новые методы action() и не выводился текст?