XMLEncoder跳过ActionListener
问题描述:
我有一个用XMLEncoder编码的JButton,一切都很适合我,直到我尝试添加一个ActionListener。现在,我收到此消息XMLEncoder跳过ActionListener
java.lang.InstantiationException: Temp$1
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JButton.addActionListener(Temp$1);
Continuing ...
有谁知道为什么会发生这种情况,或者如何防止它?
答
开箱即用XMLEncoder
只能应对Java Beans的自定义类,特别是该类必须具有无参数构造函数。匿名内部类(例如Test$1
)在字节码级别没有无参数构造函数,因为编译器在构造函数参数列表的开始处插入一个不可见参数,以传递对类的“contains instance”的引用那封闭的内部类。
java.beans package documentation正是这一点,并建议使用java.beans.EventHandler而不是听众的内部类。