2

我有一个用 XMLEncoder 编码的 JButton,一切都很好,直到我尝试添加一个 ActionListener。现在,我收到了这条消息

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

有谁知道为什么会发生这种情况,或者如何预防?

4

1 回答 1

3

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

java.beans 包文档恰恰说明了这一点,并建议使用java.beans.EventHandler而不是侦听器的内部类。

于 2013-04-03T09:09:01.090 回答