JavaFX меняет сцену из другой темы [дубликат]

Вы можете сделать это, используя это легко командой SimpleDateFormat

   String date = "13 Oct 2016";
   java.util.Date date2 = new SimpleDateFormat("yyyy-MM-dd").parse(date);
   JdateChooser.setDate(date2);

, а также вы можете использовать любой формат даты.

12
задан Dragon 20 June 2014 в 18:11
поделиться

1 ответ

Объяснение

В первом сценарии , когда вы используете

Task task = new Task<Void>() {
  @Override
  protected Void call() throws Exception {
      initStubGamepad();
      return null;
  }
}

Внутри initStubGamepad(), который запущен на задаче, вы пытаются обновить компоненты пользовательского интерфейса внутри методов pressBtn() и releaseBtn(), поэтому вы сталкиваетесь с

java.lang.IllegalStateException: Not on FX application thread

, поскольку все обновления пользовательского интерфейса должны встречаться в потоке JavaFX

В втором сценарии , когда вы используете

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        initStubGamepad();
    }
});

, пользовательский интерфейс не появляется, потому что у вас бесконечный цикл внутри initStubGamepad(), который помещает поток приложений JavaFX в бесконечный цикл

Решение

. К тому времени, как вы сюда доберетесь, вы должны уже найти решение. Если вы этого не сделали, попробуйте поместить обновление компонентов Javafx в поток пользовательского интерфейса. Таким образом, вместо вызова initStubGamepad() внутри Platform.runLater попробуйте вызвать внутри него pressBtn() и releaseBtn().

Попробуйте использовать

while (true) {
   if (rnd.nextInt(30) == 3) {
      Platform.runLater(() -> pressBtn());            
   } else if (rnd.nextInt(30) == 7) {
       Platform.runLater(() -> releaseBtn());            
   }
}

или вы также можете использовать

public void pressBtn() {
    if(!isXPressed) {
        Platform.runLater(() -> iv1.setVisible(true));
        isXPressed = true;
    }
}
24
ответ дан ItachiUchiha 22 August 2018 в 20:59
поделиться
  • 1
    Спасибо, большое спасибо за объяснение. Я понял, что было не так в использовании Platform.runLater() и Task. – Dragon 21 June 2014 в 12:33
Другие вопросы по тегам:

Похожие вопросы: