エージェントで Java を実行しています。
アプリケーションが GUI (swing) を使用しない場合、以下に示す両方の JRE で問題なく動作します。
GUI (swing) を使用する場合、JRE: HotSpot (TM) 64 ビット サーバー VM (ビルド 1.6.0-b105、混合モード) を使用する場合は問題なく動作します。
しかし、JRE: /usr/lib/jvm/java-6-openjdk を使用すると、org.GNOME.Accessibility.JavaBridge$AccessQueueによって例外 java.lang.NoClassDefFoundError がスローされます。
エージェントがなくても、コンソール アプリケーションにエージェントが適用されていても、両方の JRE で正常に動作します。
例外は、エージェントのクラスの 1 つが見つからないことを示しています: ****java.lang.NoClassDefFoundError: mypack/myagent/MyClass****
ただし、このクラスは既にロードされています: ****[ファイルからmypack.myagent.MyClassをロードしました:/home.owner/Tests/AGENT.jar]****
???????
JRE が同じクラスを再度ロードしようとするのはなぜですか? 今回はなぜ見つからないのですか?
(すべてのエージェント クラスは、すべての依存関係と共に jar ファイル内に存在します)
以下は、出力の抜粋です。-verboseコマンド ライン オプションが使用されます。
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jarを開いた]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.lang.Object をロード]
[ファイルから mypack.myagent.Main をロード:/home/owner/Tests/AGENT.jar
[/usr/lib/jvm/java-6-openjdk/jre/lib から java.lang.instrument.ClassFileTransformer を読み込みました
/rt.jar]
起動エージェント...
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.net.URLClassLoader$2 をロード]
[ファイルから org.apache.log4j.CategoryKey をロード:/home/owner/Tests/AGENT.jar]
[ファイルからmypack.myagent.MyClassをロード:/home.owner/Tests/AGENT.jar]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から org.w3c.dom.Node をロード]
[/usr/lib/jvm/java-6-openjdk/jre/lib から java.io.UnsupportedEncodingException を読み込みました
/rt.jar]
[ロードされた sun.net.www.protocol.jar.URLJarFile$URLJarFileEntry から /usr/lib/jvm/java-
6-openjdk/jre/lib/rt.jar]
[ロードされた sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream から /usr/lib/jvm/java-
6-openjdk/jre/lib/rt.jar]
[/usr/lib/jvm/java から com.sun.org.apache.xerces.internal.util.SecurityManager をロードしました-
6-openjdk/jre/lib/rt.jar]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から sun.management.RuntimeImpl をロード]
エージェントからこんにちは...
[ファイルから testpackage.GuiTest をロードしました: ...
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.awt.LayoutManager をロード]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.awt.image.ImageObserver をロード]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.awt.MenuContainer をロード]
. . .
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から sun.awt.X11.XEvent をロード]
[ファイルから org.GNOME.Accessibility.JavaBridge をロード:/usr/share/java/gnome-java-bridge.jar]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.awt.event.FocusListener をロード]
[ファイルから org.GNOME.Accessibility.JavaBridge$AccessQueue をロード:/usr/share/java/gnome-
java-bridge.jar]
[/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar から java.lang.InstantiationException をロード]
スレッド「メイン」の例外 java.lang.NoClassDefFoundError: mypack/myagent/MyClass
org.GNOME.Accessibility.JavaBridge.(JavaBridge.java) で
sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) で
java.lang.reflect.Constructor.newInstance (Constructor.java:532) で
java.lang.Class.newInstance0 (Class.java:372) で
java.lang.Class.newInstance (Class.java:325) で
java.awt.Toolkit.loadAssistiveTechnologies (Toolkit.java:786) で
java.awt.Toolkit.getDefaultToolkit (Toolkit.java:874) で
java.awt.Window.getToolkit (Window.java:1170) で
java.awt.Window.init(Window.java:400) で
java.awt.Window で (Window.java:438)
java.awt.Frame.(Frame.java:419) で
javax.swing.JFrame.(JFrame.java:224)
testpackage.GuiTest で。(GuiTest.java:52)
testpackage.GuiTest.main (GuiTest.java:39) で
原因: java.lang.ClassNotFoundException: mypack.myagent.MyClass
java.net.URLClassLoader$1.run(URLClassLoader.java:217) で
java.security.AccessController.doPrivileged(ネイティブメソッド)で
java.net.URLClassLoader.findClass(URLClassLoader.java:205) で
java.lang.ClassLoader.loadClass(ClassLoader.java:323) で
java.lang.ClassLoader.loadClass(ClassLoader.java:268) で
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)で
... 16以上