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

デフォルトでは、XMLEncoderJava Beans であるカスタム クラスのみを処理できます。特に、クラスには引数のないコンストラクターが必要です。あなたのような匿名の内部クラスTest$1は、バイトコードレベルで引数のないコンストラクターを持っていません。これは、コンパイラーがコンストラクターのパラメーターリストの先頭に目に見えない引数を挿入して、クラスの「含むインスタンス」への参照を渡すためです。内部クラスを囲みます。

java.beans パッケージのドキュメントはまさにこの点を指摘しており、リスナーの内部クラスの代わりにjava.beans.EventHandlerを使用することを提案しています。

于 2013-04-03T09:09:01.090 に答える