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而不是听众的内部类。