我正在使用代理运行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都可以正常运行。
该异常表示找不到我的代理程序的一个类: **** 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的 [从/ usr / lib / jvm / java-6-openjdk / jre / lib /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] 线程“main”中的异常java.lang.NoClassDefFoundError:mypack / myagent / MyClass at org.GNOME.Accessibility.JavaBridge。(JavaBridge.java) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:45) at 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) at 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 at java.net.URLClassLoader $ 1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:323) 在java.lang.ClassLoader.loadClass(ClassLoader.java:268) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336) ... 16更多
答案 0 :(得分:0)
我通过从
创建指向我的jar文件的符号链接来解决问题/ usr / lib / jvm / java-6-openjdk / jre / lib / ext目录。