最近、新しいマシン 64 ビット Windows 7 に引っ越しました。しかし、このコードを実行すると、間違った OS 名が表示されます。
String osName = System.getProperty("os.name");
System.out.println("OS Name = " + osName);
出力は次のとおりです。
OS Name = Windows Vista
私のコードまたはシステムの何が問題なのですか?
前もって感謝します。
古いバージョンの Java を使用している可能性があります。これは既知のバグ (bug_id=6819886) であり、新しいバージョンで修正されています。 詳細については、こちらをお読みください。
Java バージョンをアップグレードできない場合に考えられる回避策:
String osName = System.getProperty("os.name");
if (osName.equals("Windows XP") || osName.equals("Windows Vista"))
{
//do something and remember to put in all the names in the above if list. I just added two for example,it will have to include all like Windows NT,ME,95,etc.
}
else
{
//the block that will be accessible for Windows 7
}
これに関して報告されたバグがあります:
http://bugs.sun.com/view_bug.do?bug_id=6819886
私はJava 7を持っていないので、Javaの新しいバージョンで修正されているかどうかはわかりません.
それは私の Windows 7 マシン (確かに 32 ビットのマシンです。現在、64 ビットのマシンにはアクセスできません) で動作します。
おそらく、あなたの JRE は Windows 7 よりも前のもので、その名前はそれに組み込まれていますか? どのバージョンの JRE を使用していますか? 最新バージョンにアップデートして、もう一度試すことをお勧めします。確かに、JRE に OS 名がハードコードされているとしたら、かなり厄介なことですが、もっと奇妙なことが起こっています。
JAVA-6 を使用してください。問題なく動作することを試しました。それ以外の場合、Windows は Vista モードを使用して JVM を処理しています。
最近同じ問題に遭遇しました。バグ 6819886評価ノートに記載されているように、os.version プロパティをチェックして、この場合Windows 7とWindows Vistaを区別できます。
Windows 7 のバージョンは 6.1、Windows Vista のバージョンは 6 です。
String osVersion = System.getProperty("os.version");
if("6.1".equals(osVersion)){
System.out.println("OS is Windows 7");
}
これにより、これを機能させるためだけに最新の Java にアップグレードする必要がなくなります。