Nimbus LaF ライブラリをさまざまなコントロール用のカスタム ペインタで拡張する Web アプリケーションがあります。アプレットは JDK 6u27 に対してビルドされており、JRE 6.x に対して期待どおりに動作しますが、JRE 7u4 に対して実行すると問題が発生しました。
カスタム Painter クラスを拡張AbstractRegionPainter
し、 のインスタンス化を試みますPaintContext
。これにより、「クラスが見つかりません」という例外がスローされます。
Nimbus はjavax.swing
Java 7 に移行され、com.sun.java.swing.plaf.nimbus.AbstractRegionPainter
(インポートしたものは) extendsになりましたが、Oracle が内部クラスjavax.swing.plaf.nimbus.AbstractRegionPainter
に同様のリダイレクトを提供しているようには見えません。PaintContext
アプレットは、デバッグ ログに次の内容を表示します。
Exception in thread "AWT-EventQueue-2" java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/nimbus/AbstractRegionPainter$PaintContext
...
Caused by: java.lang.ClassNotFoundException: com.sun.java.swing.plaf.nimbus.AbstractRegionPainter$PaintContext
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
拡張するすべてのクラスは をAbstractRegionPainter
提供する必要があるためPaintContext
、これは JRE7u4 の後方互換性バグのように思えますが、この問題を修正/回避する方法についてアイデアをお持ちの方がいらっしゃいましたら、よろしくお願いいたします。