添加多个侦听器的JavaFX MapProperty问题

时间:2015-01-18 19:53:19

标签: javafx

当我向Java MapProperty添加第二个侦听器时,似乎都没有响应。

MapProperty<String, String> mp =
        new SimpleMapProperty<String, String>(
                FXCollections.observableHashMap());

mp.addListener((obv1, ov1, nv1) -> {
    System.out.format("1: mp: %s%n", nv1);
});
mp.put("key1", "object1");

mp.addListener((obv2, ov2, nv2) -> {
    System.out.format("2: mp: %s%n", nv2);
});
mp.put("key2", "object2");

在第二个addListener之后,它停止打印。输出是:

1: mp: {key1=object1}

当我注释掉添加第二个mp.addListener时,它会打印两个添加内容。

1: mp: {key1=object1}
1: mp: {key2=object2, key1=object1}

我做错了吗?

1 个答案:

答案 0 :(得分:0)

好吧,如果你添加一个没有做任何事情的空MapChangeListener(或者做某事的那个),它似乎解决了这个问题。

mp.addListener(new MapChangeListener<String, String>() {
    @Override
    public void onChanged(Change<? extends String, ? extends String> map) {}
});

现在输出符合预期。

1: mp: {key1=object1}
1: mp: {key2=object2, key1=object1}
2: mp: {key2=object2, key1=object1}

似乎支持它是一个错误。