2015-01-18 4 views
0

Когда я добавляю второго слушателя к Java MapProperty, ни один из них не отвечает.Проблема JavaFX 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} 

Я делаю что-то неправильно?

+0

Я вижу то же поведение. Это похоже на ошибку. –

+0

Спасибо. Я попытался представить ошибку, но для Java FX это не кажется простым. –

+1

Чтобы отправить ошибку, просто зарегистрируйтесь на https://javafx-jira.kenai.com, и вы можете отправить его. –

ответ

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} 

Кажется, что это ошибка.

+0

Советую вам подать отчет об ошибке на странице https://javafx-jira.kenai.com и отредактировать ответ, чтобы включить ссылку на отчет об ошибке. – jewelsea

+0

Создал учетную запись на сайте JIRA и создал идентификатор ошибки RT-39857 (https://javafx-jira.kenai.com/browse/RT-39857). Также обнаружено, что проблема вызвана вызовом метода put перед добавлением второго addListener. Перенос первого объекта после второго addListener создает желаемый результат. –

Смежные вопросы