如何在Windows上反映JAR中的类【JAVA教程】

!
也想出现在这里? 联系我们
信息

如何在Windows上反映JAR中的类,第1张

概述如何在Windows上反映JAR中的类

假设下面的loader定义(这个例子是用scala编写的,但是和Java几乎一样,所以你应该很容易理解这个问题) :

jar = new file(\”path/to/myjar.jar\”) url = jar.toURI.toURL urls = Array[URL](url) // just a single-element array containing the url loader = new urlclassloader(urls)

JAR myjar.@R_301_6476@含org/pack/Simple.class 。 Simple具有标准的org.pack包,通过JavaCompiler编译并打包到JAR中。 JAR是正确的(可执行文件等)

在linux上, loader.loadClass(\”org.pack.Simple\”)返回正确的Class对象。

在windows上,它抛出一个ClassNotFoundException 。 当然,我使用而不是/作为文件分隔符。

从JAR内读取文件不能在windows上工作

Java Class.isAssignableFrom总是返回false …只在IDE之外

我做错了什么? 或者只是窗户吸? 我安装了OracleJDK8,并将其bin/文件夹添加到path 。

EDIT1:

如果我将JAR解压到某个目录,并让ClassLoader从指向该目录的URL读取,则一切正常。 这怎么可能?

我昨天一直在努力解决这个问题,但经过长时间的Google会议,我偶然发现了这个解决方案。

您指定的URL对象必须如下创建:

urlclassloader.addURL(new file(pathParam).toURI().toURL());

或者在构造函数中如下所示:

new urlclassloader(new URL[]{new file(pathParam).toURI().toURL()},this.getClass().getClassLoader());

请注意,构造函数具有父类加载器作为参数。

为loadClass()方法。 你需要确保类的路径是二进制格式(就像你已经做的那样)。

由于某种原因,即使我使用URL(String)构造函数创建一个URL对象,它也不起作用。

如果你去查看java.lang.classLoader超类,你会注意到它默认抛出一个异常。 这就是为什么类加载器很重要。

protected Class<?> findClass(String name) throws ClassNotFoundException { throw new ClassNotFoundException(name); }

总结

以上是内存溢出为你收集整理的如何在Windows上反映JAR中的类全部内容,希望文章能够帮你解决如何在Windows上反映JAR中的类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞68 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容