Вы можете сделать это, используя это легко командой SimpleDateFormat
String date = "13 Oct 2016";
java.util.Date date2 = new SimpleDateFormat("yyyy-MM-dd").parse(date);
JdateChooser.setDate(date2);
, а также вы можете использовать любой формат даты.
Объяснение
В первом сценарии , когда вы используете
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;
}
}
Platform.runLater()
иTask
. – Dragon 21 June 2014 в 12:33