0

我正在使用代理运行 java。

当我的应用程序不使用 GUI (swing) 时,它在下面提到的两个 JRE 下运行良好。

当它使用 GUI (swing) 时,当使用 JRE: HotSpot (TM) 64 Bits Server VM (build 1.6.0-b105, mixed mode) 时,它运行良好。

但是使用 JRE:/usr/lib/jvm/java-6-openjdk,它会产生由org.GNOME.Accessibility.JavaBridge$AccessQueue抛出的异常 java.lang.NoClassDefFoundError

如果没有我的代理或使用代理但应用于控制台应用程序,它对于两个 JRE 都运行良好。

异常告诉我的代理类之一没有找到:****java.lang.NoClassDefFoundError: mypack/myagent/MyClass****

但是这个类已经加载了:****[Loaded mypack.myagent.MyClass from file:/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]

[从 /usr/lib/jvm/java 加载 sun.net.www.protocol.jar.URLJarFile$URLJarFileEntry-

6-openjdk/jre/lib/rt.jar]

[从 /usr/lib/jvm/java 加载 sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream-

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(Native Method)

在 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 回答