Java中获取的操作系统名称不正确。

9

最近我换了一台全新的64位Windows 7机器。但当我运行这段代码时,却得到了错误的操作系统名称。

String osName = System.getProperty("os.name");
System.out.println("OS Name = " + osName);

输出结果为:
OS Name = Windows Vista

有什么想法,我的代码或系统出了什么问题吗?
提前感谢。

1
也许Windows正在以“Vista模式”(兼容模式)运行您的JVM? - user377628
我正在使用java.version = 1.5.0_16,因为我们的项目依赖于它。 - Kishore_2021
6个回答

12
你可能正在使用一个较旧的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
    }
    

在使用保存的Java版本时,这个问题的解决方案是什么? - Kishore_2021

4

3

这在我的Windows 7机器上运行良好(承认是32位的; 我现在无法访问64位的)。

也许你的JRE版本比Windows 7早,名称已经被固定在其中了?你使用的JRE版本是哪个?我建议升级到最新版本并再次尝试。如果JRE确实将操作系统名称硬编码进去,那么这确实相当糟糕,但更奇怪的事情也发生过。


可能性是存在的,但我认为这不太可能。 - user377628
我正在使用java.version = 1.5.0_16,因为我们的项目依赖于它。 - Kishore_2021

2
使用JAVA-6,我尝试过,它可以正常工作,否则你的Windows可能会以Vista模式处理JVM。

1

我最近遇到了同样的问题。如错误6819886评估说明所述,在这种情况下,您可以检查os.version属性来区分Windows 7Windows 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才能使其正常工作。

0
    String winVer = System.getProperty("os.name");
    if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("95")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("98")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("ME")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("3.51")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("NT 4.0")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2000")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("XP")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("7")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("8")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("8.1")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("10")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2003")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("Vista")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2008")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2008 R2")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2012")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2012 R2")) {
        System.out.println(winVer);
    } else if (winVer.toLowerCase().contains("windows") && winVer.toLowerCase().contains("2016")) {
        System.out.println(winVer);
    }
  • 列表项

  • http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/8430a707e22b/src/windows/native/java/lang/java_props_md.c - Hakan ÇELİK

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接