Я знаю, что есть ответы на мои вопросы, но я не понял проблему в своем коде.Как использовать javaFX Task в моем случае - Не дублировать
Почему я получаю:
java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
Я пытаюсь добавить текст из задачи в поток текста с использованием метода в классе контроллера, по какой-то причине программа не на .getChildren() метод.
Позвоните Spliter в классе контроллера:
btnSplit.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
Thread split = new Thread(new Spliter(custToSplit, Controller.this));
split.setDaemon(true);
split.start();
}
});
класс Spliter constractor:
public Spliter(File f, Controller c){
this.c = c;
this.cust = f;
}
c.updateHebFlow("Dir created: "+ newDir.getAbsolutePath() , INFO_TEXT);
Часть класса контроллера:
@FXML
private TextFlow hebFlow;
@Override
public void initialize(URL location, ResourceBundle resources) {
assert hebFlow != null : "fx:id=\"hebFlow\" was not injected: check your FXML file 'MainXml.fxml'.";
public void updateHebFlow(String text,String type){
normalText = new Text();
errorText = new Text();
errorText.setFill(Color.RED);
infoText = new Text();
infoText.setFill(Color.BLUE);
switch(type){
case(ERROR_TEXT) :
errorText.setText(text);
hebFlow.getChildren().addAll(new Text("/n"), errorText);
break;
case(INFO_TEXT) :
infoText.setText(text);
hebFlow.getChildren().addAll(new Text("/n"), infoText);
break;
case(NORMAL_TEXT) :
normalText.setText(text);
hebFlow.getChildren().addAll(new Text("/n"), normalText);
break;
}
}
}
Позвоните updateHebFlow в классе Spliter:
try{
c.updateHebFlow("Script by TulTul", INFO_TEXT);
}catch (Exception e){
e.printStackTrace();
}
Из чего я понимаю, я не могу изменить пользовательский интерфейс другого класса, кроме контроллера, поэтому Ive сделал метод в классе контроллера, который внесет изменения и вызовет его в классе Task, почему я получаю это исключение ? Если это неправильно, то что это за ошибка?
Спасибо, наконец, он работает –