我在代码中遇到了一个非常奇怪的问题。我使用下面的代码来下载我的jar文件。这在JAVA-5和JAVA-6中工作正常。
def AddJarToClassloader(self,u):
#sysloader = java.lang.ClassLoader.getSystemClassLoader()
sysloader = java.net.ClassLoader.getSystemClassLoader()
sysclass = sysloader.getClass()
print 'All Methods: ' + str(sysclass.getDeclaredMethods())
method = sysclass.getDeclaredMethod("addAppURL", [java.net.URL])
print 'All method= ' + str(method)
method.setAccessible(1)
jar_a = java.net.URL(u)
b = method.invoke(sysloader, [jar_a])
return sysloader但是,最近我们把所有的Linux机器都升级到了Java 8。现在,这段代码不再工作了。我在日志文件中看到以下错误。有谁能帮我解决这个问题吗?
JAVA-8的错误日志:
[java] All Methods: array(java.lang.reflect.Method, [public java.lang.Class sun.misc.Launcher$AppClassLoader.loadClass(java.lang.String,boolean) throws java.lang.ClassNotFoundException, private void sun.misc.Launcher$AppClassLoader.appendToClassPathForInstrumentation(java.lang.String), private static java.security.AccessControlContext sun.misc.Launcher$AppClassLoader.getContext(java.io.File[]) throws java.net.MalformedURLException, protected java.security.PermissionCollection sun.misc.Launcher$AppClassLoader.getPermissions(java.security.CodeSource), public static java.lang.ClassLoader sun.misc.Launcher$AppClassLoader.getAppClassLoader(java.lang.ClassLoader) throws java.io.IOException])
[java] java.lang.NoSuchMethodException: sun.misc.Launcher$AppClassLoader.addAppURL(java.net.URL)
[java] at java.lang.Class.getDeclaredMethod(Class.java:2130)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[java] at java.lang.reflect.Method.invoke(Method.java:498)
[java] at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:175)
[java] at org.python.core.PyObject.__call__(PyObject.java:355)
[java] at org.python.core.PyMethod.__call__(PyMethod.java:215)
[java] at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:221)
[java] at org.python.core.PyMethod.__call__(PyMethod.java:206)
[java] at org.python.core.PyObject.__call__(PyObject.java:414)
[java] at org.python.core.PyObject.__call__(PyObject.java:418)发布于 2018-08-16 17:46:07
在Java8方法中,似乎从sun.misc.Launcher$AppClassLoader类中删除了addAppURL。但是您可以尝试使用java.net.URLClassLoader#addURL方法,因为URLClassLoader是sun.misc.Launcher$AppClassLoader的父方法。
所以试着改变一下线路
method = sysclass.getDeclaredMethod("addAppURL", [java.net.URL])带行
method = sysclass.getSuperclass().getDeclaredMethod("addURL", [java.net.URL])https://stackoverflow.com/questions/51873292
复制相似问题