我有一些使用Netty的DnsNameResolverBuilder的代码,它在一台Linux机器上运行得很好,但是,当在另一台机器上运行时,无法初始化,抛出下面的空指针异常:
java.lang.NullPointerException
at io.netty.resolver.dns.DnsNameResolver.<init>(DnsNameResolver.java:217)
at io.netty.resolver.dns.DnsNameResolverBuilder.build(DnsNameResolverBuilder.java:348)
这是由DnsNameResolverBuilder.build()
调用引起的,实际上没有进行任何名称解析。除了netty-all-4.1.6.Final.jar之外,小测试示例没有依赖关系。我使用scala,并在每台机器上单独编译。
效果很好:
$ scala -version
Scala code runner version 2.12.0-M1 -- Copyright 2002-2013, LAMP/EPFL
$ java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
失败:
# scala -version
Scala code runner version 2.12.0 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.
# java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
Netty jar是相同的(我将它从一台机器复制到另一台机器上),并且类路径中没有其他jar(除了要重现的代码)。
可能是什么原因?这是JVM不兼容问题吗?代码完全相同,平台几乎相同,只是初始化,而不是呼叫网络。
并且,如果没有明显的答案:我如何去尝试确定它?