2016-03-21 8 views
1

Ich muss den Namen des aktuellen Computers kennen.Schlechtes Verhalten mit InetAddress.getLocalHost(). GetHostName() in Java 8

Die einfachste Methode ist durch Laufen:

java.net.InetAddress.getLocalHost().getHostName() 

Mit OpenJDK 7 in einer Linux-Maschine, ist das Ergebnis korrekt ist, wie hostname vom System Befehl gemeldet wird.

Aber mit OpenJDK 8 ist der zurückgegebene Name localhost, was nutzlos ist.

Warum das unterschiedliche Verhalten? Wie kann ich den echten Namen mit Java 8 bekommen?

Verwandte Fragen:

Antwort

-1

Meine /etc/hosts Datei ist wie folgt:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 myserver 

dann:

InetAddress.getLocalHost().getHostName().equals("localhost") 

Wenn ich es dies zu ändern:

127.0.0.1   myserver localhost localhost.localdomain localhost4 localhost4.localdomain4 

dann:

InetAddress.getLocalHost().getHostName().equals("myserver") 

Java 8 ist empfindlicher auf Bestellung als Java 7, die immer richtige Ergebnis zurückgibt.

UPDATE: Weitere Untersuchungen haben gezeigt, dass dies bei CentOS 6 das Verhalten ist: Java 8 ist ordungsabhängig. In CentOS 7 funktioniert Java 8 wie Java 7.

+1

Wurde Ihre Anfrage gelöst? Es scheint, dass Sie einfach den Inhalt der Hosts-Datei hinzufügen. Sollte das nicht ein Teil der Frage sein? –

+0

@Am_I_Hilfreich, es wurde gelöst. Dies ist eine Problemumgehung für einen Fehler in Java 8. –

+0

@ david.perez Gibt es tatsächlich einen Fehler in Java 8 oder haben Sie gerade entschieden, dass dies ein Fehler ist? – Kayaman

0

Verwenden Sie getCanonicalHostName() statt getHostName()!

+0

In meinem Fall liefert 'getCanonicalHostName()' dasselbe Ergebnis als 'getHostName()' –