【问题标题】:Why does this usage of InetAddress.getLocalHost() work okay with Java 6 but fails with Java 7 on OSX [duplicate]为什么 InetAddress.getLocalHost() 的这种用法适用于 Java 6,但在 OSX 上适用于 Java 7 [重复]
【发布时间】:2013-11-20 18:39:47
【问题描述】:

它对我来说没问题,但在 OSX Mavericks 上,特定客户的 InetAddress.getLocalHost() 在 Java 7 上失败,尽管它在 Java 6 上工作正常,但有以下异常

java.net.UnknownHostException: rupert: rupert: nodename nor servname provided, or not known
    at java.net.InetAddress.getLocalHost(InetAddress.java:1466)
Caused by: java.net.UnknownHostException: rupert: nodename nor servname provided, or not known
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:894)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1286)
    at java.net.InetAddress.getLocalHost(InetAddress.java:1462)

这是设计的吗?

更新

看起来是 Java 8 中修复的一个已知错误

https://bugs.openjdk.java.net/browse/JDK-7180557

【问题讨论】:

  • 我会说这是环境问题。他们的主机名正在 DNS 中查找,但未找到。它确实在 Java 6 VM 中工作,但显然 Java 7 的查找机制已经改变。如果我使用sudo hostname rupert 更改我的主机名,然后运行一些简单的测试代码,我会得到同样的错误。
  • +1 表示这是 Java 中的一个已知错误,已在 1.8 中修复。我可以确认在我的 Mac OS X 10.10 (Yosemite) 环境中的 Oracle Java 1.7.0_72(撰写本文时最新)下运行此程序失败并报告异常,但正如预期在 Oracle Java 1.8.0_25(撰写本文时最新)下)。在我升级之前,我相信它在 Mac OS X 10.9 (Mavericks) 下可以正常工作。我怀疑升级调整了一些非常特别的网络配置,因为原始报告提到小牛而不是优胜美地。
  • 是否希望将修复程序向后移植到需要 JDK 7 而不是 8 的用户?我在报告的错误中没有看到这一点
  • 从该错误报告看来,它也在 7u85 中得到修复,但似乎它们仅在 7u79 之前公开发布

标签: java macos java-7 osx-mavericks


【解决方案1】:

将其中的 {yourhostname} 部分添加到 /etc/hosts

例如

127.0.0.1       localhost {yourhostname}

问题就消失了。

【讨论】:

  • 您可以通过在终端输入命令hostname 并查看它返回的内容来获取您的主机名。
  • 终于找到了一个至少可以解决问题的答案,谢谢! (作为关注者的说明,我认为这与它进行某种反向主机名查找apple.stackexchange.com/q/30552/25085)有关。
【解决方案2】:

我猜你会找到答案here - 尽管这个问题是关于 Solaris 的,但 Mac OS X 和 Solaris 都是 Unix 操作系统。

【讨论】:

  • 是的,你是对的,我想这引出了一个问题,你如何在 Java 中获取本地 ipa 地址,以及如何在我使用 InetAddress address = java.net 时获取 mac 地址.InetAddress.getLocalHost(); NetworkInterface ni = NetworkInterface.getByInetAddress(address);
  • 如果这是一个重复的问题,您应该投票关闭,而不是链接到答案中的重复项。
  • 即使我不知道它是否真的是重复的?这只是一个猜测,否则我会投票。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 2012-05-19
  • 2013-05-27
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多