我知道我的问题有答案,但我不理解代码中的问题。
为什么我得到:
java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
我正试图使用controller类中的方法将任务中的文本添加到文本流中,由于某些原因,程序无法运行。getChildren()方法。
在控制器类中调用拆分器:
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();
}
});
类拆分构造函数:
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:
try{
c.updateHebFlow("Script by TulTul", INFO_TEXT);
}catch (Exception e){
e.printStackTrace();
}
据我所知,除了控制器之外,我不能从其他类更改UI,所以我在控制器类中创建了一个方法,该方法将进行更改并在任务类中调用它,为什么我得到这个异常?如果这是错误的,那么wright方法是什么?
据我所知,我不能从其他类更改UI,然后控制器
实际上,正确的说法是:“除了JavaFX UI线程之外,您不能从任何线程更改UI”。因此,解决方案是使用平台。从拆分器运行later()
,如下所示:
// Java 8
Platform.runLater(() -> {
c.updateHebFlow("Script by TulTul", INFO_TEXT);
});
// Java 7
Platform.runLater(new Runnable() {
public void run() {
c.updateHebFlow("Script by TulTul", INFO_TEXT);
}
});
Platform.run稍后()
保证在JavaFX UI线程中按调用顺序运行块。
问题内容: 我已经使用JavaFX制作了GUI,并且有三个单选按钮,一旦用户单击“提交”并创建了另一个线程,并且根据检查的单选按钮,该线程将运行所需的输出并将结果输出到控制台。 但是,当线程正在运行时(一个过程大约需要30秒才能完成),我可以检查任何单选按钮。为此,它创建另一个线程,并与其他正在进行的线程长时间输出。所以我的输出盒简直是一团糟!我正在查看 异步 任务,但不确定是否与此相关。 这是我
我正在使用Intellij Idea在MacOS上用Java编写代码。我安装了在官方网站上下载的JDK Java 11。Java工作很好。但是,现在我想使用JavaFX库。 因此,我使用导入JavaFX 但我得到错误:。 所以我搜索了一小段,发现我必须将项目创建为“JavaFX应用程序”,所以我这样做了,但在文件中我得到的消息是: 未配置JavaFX运行时。或者使用内置JavaFX的JDK,或者向
我使用JavaFX制作了一个GUI,有三个单选按钮,一旦用户单击提交并创建了另一个线程,并且根据检查了什么单选按钮,线程运行所需的输出并将结果输出到控制台。 但是当线程运行时(一个进程需要大约30秒才能完成),我可以检查任何放射性按钮。它创建另一个线程并与另一个正在进行的线程一起输出长时间。所以我的输出框只是一个乱七八糟的东西!我在看异步任务,但我不确定这是否与它有关。 以下是我需要的:如果一个任
问题内容: 我在Java文档中看到了这一点:ScheduledAtFixedRate,它说 如果该任务的任何执行遇到异常,将禁止后续执行 我不希望在我的应用程序中发生这种情况。即使看到异常,我也总是希望后续执行继续进行。我怎样才能从。 问题答案: 用try / catch包围Callable.call方法或Runnable.run方法… 例如: 请注意,捕获除编译器也告诉您的内容之外的其他内容(在
JCIP-的摘要 如果一个周期性计时器任务计划每10毫秒运行一次,而另一个计时器任务需要40毫秒才能运行,则周期性任务在长时间运行的任务完成后会被快速连续调用四次(取决于它是以固定速率还是固定延迟调度的),或者完全“错过”四次调用。 我知道,由于第一个任务计划每10毫秒运行一次,因此在40毫秒内,它将执行4次。 但作者所说的完全错过四次调用是什么意思呢?