使用Class.forName()
加载类并获取错误非常有趣...我编写了一行代码,并如上所述获取错误。
class UnsatisfiedLinkErrorTest {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(Class.forName("java.net.SocketOutputStream"));
}
}
当我使用java UnsatisfiedLinkErrorTest
时,出现错误消息:
> java UnsatisfiedLinkErrorTest
Exception in thread "main" java.lang.UnsatisfiedLinkError: java.net.SocketOutputStream.init()V
at java.net.SocketOutputStream.init(Native Method)
at java.net.SocketOutputStream.<clinit>(SocketOutputStream.java:44)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:259)
at UnsatisfiedLinkErrorTest.main(UnsatisfiedLinkErrorTest.java:3)
但是当我在Idea中运行它时,我得到了:
> java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49247:/Applications/IntelliJ IDEA.app/Contents/bin" UnsatisfiedLinkErrorTest
class java.net.SocketOutputStream
我不知道为什么在Idea中我可以得到真正的答案,(也许是jni?)我希望有人可以告诉我原因。谢谢。
答案 0 :(得分:0)
此问题已解决。然后,我取消了该类的初始化,然后错误消失了。错误与初始化有关,而不与查找本机库有关。所以:
class UnsatisfiedLinkErrorTest {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(Class.forName("java.net.SocketOutputStream", false, null)); // will be okay!
}
}