java:线程“ main”中的异常java.lang.UnsatisfiedLinkError:java.net.SocketOutputStream.init()V

时间:2018-06-20 16:36:31

标签: java

使用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?)我希望有人可以告诉我原因。谢谢。

1 个答案:

答案 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!
    }
}