我正在尝试使用 java 反射加载一堆类。一切似乎都正常(如果找不到类,我正在处理异常)。
但是,有一个特定的类引发了另一个异常,该异常不是通过调用 Class.forname() 而是通过内部方法引发的,因此我什至无法捕获它。
这是我的代码:
try {
URL url = Class.forName(qualifiednameOfTheClass);
} catch (ClassNotFoundException ex) {
// ok class not found can be handled
} catch (Exception e){
// catch every other exception just to try to get the strange exception
}
因此,使用此代码一切正常,我在很多类上使用它并且它正在工作(有时它发现它有时它没有)。
但是,有一种情况无法正常工作,我不明白为什么。如果qualifiednameOfTheClass = sun.security.krb5.SCDynamicStoreConfig
我的代码引发异常:
线程“mythread-1”中的异常 java.lang.UnsatisfiedLinkError:java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886) 处的 java.library.path 中没有 osx 在 java.lang.Runtime.loadLibrary0(Runtime.java: 849) 在 java.lang.System.loadLibrary(System.java:1088) 在 sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:67) 在 sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:47) ) at java.security.AccessController.doPrivileged(Native Method) at sun.security.krb5.SCDynamicStoreConfig.(SCDynamicStoreConfig.java:39) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName( Class.java:190) 在 com.myclass.getJARFromClassForName(JavaId.java:510) 在 com.myclass.getJARUrl(Id.java:550) 在 com.myclass.collectInformation(Graph.java:366) 在 com.myclass。创建节点(图。java:166) 在 com.myclass.Graph.(Graph.java:143) 在 com.myclass2.run(myclass2.java:246) 在 java.lang.Thread.run(Thread.java:745)
因此,正如您在错误中看到的那样,我们有这个奇怪的异常,即使在我的代码中使用通用的 catch 也无法捕获它,我无法理解为什么会引发它以及这个 osx 库实际上是什么(我在 linux 上)
编辑:我唯一找到的是这个链接http://www.straub.as/java/pocketapi/index7.html但它是德语的,所以我用谷歌翻译阅读它,我不知道我是否明白了对,但是说那里列出的类不能用 Class.forname() 本身复制。
这是真的吗?有没有理由不能加载反射或者我做错了什么?