gpt4 book ai didi

Java 数据绑定(bind)和自定义转换器

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:09 25 4
gpt4 key购买 nike

我正在尝试将 AtomicBoolean 绑定(bind)到 JCheckBox 的“enabled”属性。由于 AtomicBoolean 不能替代 Boolean,因此我使用自定义转换器。但是,下面显示的转换器会导致 ClassCastException。为什么?

org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, isIdle, org.jdesktop.beansbinding.ObjectProperty.create(), cornerCb, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
binding.setConverter(new Converter<AtomicBoolean, Boolean>() {
@Override
public Boolean convertForward(AtomicBoolean value) {
Boolean b = value.get();
return b;
}

@Override
public AtomicBoolean convertReverse(Boolean value) {
return new AtomicBoolean(value);
}
});

导致异常

java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2990)
at org.jdesktop.beansbinding.Binding.convertForward(Binding.java:1312)
at org.jdesktop.beansbinding.Binding.getSourceValueForTarget(Binding.java:844)
at org.jdesktop.beansbinding.Binding.refreshUnmanaged(Binding.java:1222)
at org.jdesktop.beansbinding.Binding.refresh(Binding.java:1207)
at org.jdesktop.beansbinding.Binding.refreshAndNotify(Binding.java:1143)
at org.jdesktop.beansbinding.AutoBinding.bindImpl(AutoBinding.java:197)
at org.jdesktop.beansbinding.Binding.bindUnmanaged(Binding.java:959)
at org.jdesktop.beansbinding.Binding.bind(Binding.java:944)
at org.jdesktop.beansbinding.BindingGroup.bind(BindingGroup.java:143)

最佳答案

该异常不是来自您的代码。它发生在这里:

private final TV convertForward(SV value) {
if (converter == null) {
Class<?> targetType = noPrimitiveType(targetProperty.getWriteType(targetObject));
return (TV)targetType.cast(Converter.defaultConvert(value, targetType));
}

return converter.convertForward(value);
}

有几个不同的 Maven 工件都包含该类,并在第 1312 行调用 Class.cast()。您使用哪个并不重要。您可能需要进行一些调试。在该行上放置一个断点,然后您可以跟踪回调并查看正在传递哪些值以及发生异常的原因。看来您的转换器由于某种原因没有被使用,这可能就是问题所在。它可能正在尝试将 AtomicBoolean 转换为 Boolean。

关于Java 数据绑定(bind)和自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com