【发布时间】:2017-07-20 19:02:22
【问题描述】:
我在 javaFX GUI 上遇到了这个问题......我想当我按下按钮时验证是否没有空窗格,否则我添加一个新窗格......但每次我得到 ConcurrentModificationException 。我试过打印,我看到这里只执行了 for 的第一部分,而不是其他部分
enter code here
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
for (Node node : vbox.getChildren()) {
if (node instanceof Pane){
Pane pane = (Pane) node ;
if (pane.getChildren().isEmpty()){
vbox.getChildren().remove(node);
}
}``
}
drugrow drug = new drugrow();
vbox.getChildren().addAll(drug.getPane());
}
});
【问题讨论】:
-
调用 Platform.runlater 将在未来或多或少未指定的点删除节点,并为您要删除的每个节点创建一个 Runnable。
-
@SedrickJefferson
Platform.runLater(...)用于在后台线程上执行当前代码时在 FX 应用程序线程上执行代码块。这个问题与线程无关。这实际上在这种情况下有效(因为Platform.runLater(...)恰好在从 FX 应用程序线程调用时实现)但充其量只是一个 hack。 -
感谢您的信息。我一直都做错了。
标签: java multithreading javafx