ええと、これを重複としてフラグを立てることを考えましたが、私が見つけた唯一の答えは、使用することを示唆しています InetAddress.getLocalHost().getHostName()。率直に言って、この場合は「localhost」を返す必要があると思います。そして、これらの答えは正しいと思います。これを行う純粋なJavaの方法は実際にはありません(少なくとも、古いJREに移植できる方法はありません)。
これを実現するために JNI を使用します。SCPreferencesGetHostName()Mac OS 10.4+、SCDynamicStoreCopyLocalHostName()古い Mac OS、GetComputerName()Win32、その他のあらゆる場所で呼び出しgethostname()ます。
/bin/hostnameもちろん、 Unix マシンで呼び出したりCOMPUTERNAME、Windows で環境変数を調べたりすることもできます。これは、JNI を呼び出した方がよいと感じるか、exec別のプログラムを呼び出した方がよいかという判断の呼びかけのようなものです。
gethostname()価値があるのは、Mac OS で呼び出さない理由は、Mac がgethostname()プライマリ イーサネット デバイスの逆引き DNS を返す奇妙な動的ホスト名処理を行うためです。Mac をケーブル モデムに直接接続するとcustomer-10-42-21-42、ケーブル プロバイダが DNS の PTR レコードとして設定することを決定したもののホスト名が取得されます。代わりに、設定に移動すると、ユーザーが決定した安定したホスト名が取得されます。