监听器中的JavaFX ObservableList remove元素抛出异常

时间:2017-09-14 08:33:31

标签: javafx javafx-8 observablelist

当我将监听器附加到可观察列表并在该监听器中时,我尝试删除一些元素,在某些情况下它会通过,在某些情况下它会崩溃。

情境: 项目已从列表中删除。它触发了监听器,在那个监听器中我尝试删除另一个项目。

  1. 如果在侦听器中我尝试删除不仅仅是最初删除的元素,那么它可以正常工作。
  2. 如果在侦听器中我尝试删除最初删除的JUST NEXT元素,它会因为UnsupportedOperationException而崩溃!!!
  3. 有没有人有类似的问题?您有任何提示,建议或解决方法吗?

    我知道你可以同时删除这两个,但问题是在监听器中我需要检测我需要删除的项目,所以我删除了那里。

    这是ObservableList中的错误吗?

    我希望它始终有效,或者至少总是崩溃。

    以下是代码示例:

    *ngFor

1 个答案:

答案 0 :(得分:3)

ListChangeListener.Change文档声明:

  

无法在侦听器中修改源列表

您可以使用Platform.runLater调用解决此问题,以安排在将来的某个时间执行其他更改:

list.addListener((ListChangeListener<String>) c -> {
    if (list.contains("second")) {
        Platform.runLater(() -> list.remove("second"));
    }
});

这样做时要小心,不要引起级联无限循环的变化。