使用javafx SimpleMapProperty时出现UnsupportedOperationException

时间:2012-12-21 18:08:15

标签: java javafx-2

为什么以下代码抛出UnsupportedOperationException

import javafx.beans.property.MapProperty;
import javafx.beans.property.SimpleMapProperty;


public class TestMapProperty {
    static MapProperty<String, String> model = new SimpleMapProperty<String, String>();


    public static void main(String[] args) {
        model.put("blue", "green"); // exception thrown here
    }
}

堆栈追踪:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractMap.put(AbstractMap.java:203)
    at javafx.beans.binding.MapExpression.put(MapExpression.java:277)
    at TestMapProperty.main(TestMapProperty.java:10)

2 个答案:

答案 0 :(得分:4)

Pace的答案仍然有效,但是如果你想要一个属性而不仅仅是一个ObservableMap,那么这不是正确的代码。

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

会更合适。您仍然需要使用新的ObservableMap实例初始化SimpleMapProperty。没有SimpleMapProperty的初始Map的构造函数将不会为您创建一个。这是因为您可以选择自己的ObservableMap实现来支持Property。

答案 1 :(得分:2)

如果您确实想要创建可观察地图的实例,则应使用

ObservableMap<String,String> model = FXCollections.observableHashMap();