|
|
1
1
你在装罐子
因此,当默认的类加载器尝试加载
因此,必须确保动态JAR中的类是可用的 在当前活动的类加载器中 当加载需要它们的类时。之后可以将jar添加到类路径中,尤其是在从中导入某些内容的类中。 |
|
|
2
6
“因此,看起来JVM需要在程序开始运行时定义所有异常类,而不是在需要时定义它们”——不,我认为这是不正确的。 我敢打赌,您的问题是由于这些潜在错误造成的,这些错误与JVM无关:
这些都不是因为类加载器的神秘性。你需要检查并确保你的工作做得很好。 为什么需要像这样动态地加载jar?你在做什么,仅仅把jar放在类路径中,让类加载器拾取它是无法完成的? 我希望这只是一个例子,而不代表爪哇的“最佳实践”:
您至少应该打印堆栈跟踪或使用log4j来记录异常。 更新:
这表明,当您从命令行运行时,硬连接到JAR路径的路径并不满足。 JVM不能以一种方式与NetBeans一起工作,而另一种方式没有它。这都是关于理解类路径、类装入器和路径问题的。当你整理好你的东西后,它会起作用的。 |
|
|
3
3
myException是动态加载的jar中的异常类吗? 注意你是 静态地 使用类MyException,正如代码中的字面意思一样。 编译时是否将dynamicetestjar.jar放在类路径中,而不是运行程序时?编译时不要把它放在类路径中,这样编译器将以静态的方式向您显示使用jar的位置。 |
|
|
4
0
在Java中,所有类都由类的加载器和类的FQN唯一标识。 类加载器是分层的,这意味着动态加载的类可以访问其父类的所有类,但父类不能直接访问其类。 现在,如果子类加载器定义了扩展父类的类,那么父类的代码只能通过反射或父类引用该类。 如果你认为所有的Java代码都是反射式的,那么这就更容易了。IE:
当前类没有访问子类加载器的权限,因此它不能这样做。 |