我正在使用代理运行 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 更多