0

エージェントで 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以上

4

1 に答える 1

0

からjarファイルへのシンボリックリンクを作成することで問題を修正しました

/ usr / lib / jvm / java-6-openjdk / jre / lib/extディレクトリ。

于 2010-02-03T21:45:51.420 に答える