XMLEncoder跳过ActionListener

时间:2013-04-03 02:11:20

标签: java swing actionlistener instantiationexception xmlencoder

我有一个用XMLEncoder编码的JButton,一切都很适合我,直到我尝试添加一个ActionListener。现在,我收到此消息

java.lang.InstantiationException: Temp$1
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JButton.addActionListener(Temp$1);
Continuing ...

有谁知道为什么会这样,或者如何预防?

1 个答案:

答案 0 :(得分:3)

开箱即用XMLEncoder只能处理Java Bean的自定义类,特别是该类必须具有无参数构造函数。匿名内部类(例如Test$1)在字节码级别没有无参数构造函数,因为编译器在构造函数的参数列表的开头插入一个不可见的参数,以传递对“包含实例”的引用“包含内部类的类。”

java.beans package documentation正好说明了这一点,并建议使用java.beans.EventHandler代替听众的内部类。