我有一个用XMLEncoder编码的JButton,一切都很适合我,直到我尝试添加一个ActionListener。现在,我收到此消息
java.lang.InstantiationException: Temp$1
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JButton.addActionListener(Temp$1);
Continuing ...
有谁知道为什么会这样,或者如何预防?
答案 0 :(得分:3)
开箱即用XMLEncoder
只能处理Java Bean的自定义类,特别是该类必须具有无参数构造函数。匿名内部类(例如Test$1
)在字节码级别没有无参数构造函数,因为编译器在构造函数的参数列表的开头插入一个不可见的参数,以传递对“包含实例”的引用“包含内部类的类。”
java.beans package documentation正好说明了这一点,并建议使用java.beans.EventHandler代替听众的内部类。