【问题标题】:Incorrect OS name getting in Java在 Java 中获取的操作系统名称不正确
【发布时间】:2012-06-04 08:36:23
【问题描述】:

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

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

输出来了:

OS Name = Windows Vista

任何想法,我的代码或系统有什么问题?

提前致谢。

【问题讨论】:

  • 也许 Windows 正在“Vista 模式”(兼容模式)下运行您的 JVM?
  • 由于我们的项目依赖性,我使用的是 java.version = 1.5.0_16。

标签: java windows-7


【解决方案1】:
    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);
    }
  1. 列表项
【解决方案2】:

最近遇到了同样的问题。正如bug 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。

【讨论】:

    【解决方案3】:

    您可能使用的是旧版本的 Java。因为这是一个已在较新版本中修复的已知错误(bug_id=6819886)。 Kindly read this for further details.


    如果您无法升级您的 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
        }
    

    【讨论】:

    • 那么在使用save java版本的时候这个问题有什么解决办法呢?
    • 谢谢@Gaara。我会这样做的。
    【解决方案4】:

    使用 JAVA-6,我试过它工作正常,否则你的 Windows 正在使用 Vista 模式处理 JVM。

    【讨论】:

      【解决方案5】:

      报告了一个关于此的错误:

      http://bugs.sun.com/view_bug.do?bug_id=6819886

      不确定它是否已在较新版本的 Java 中修复,因为我没有 Java 7。

      【讨论】:

        【解决方案6】:

        它可以在我的 Windows 7 机器上运行(当然是 32 位机器;我现在无法访问 64 位机器)。

        也许您的 JRE 早于 Windows 7,并且名称已融入其中?您使用的是哪个版本的 JRE?我建议更新到最新版本并重试。诚然,如果 JRE 确实 将操作系统名称硬编码到其中,那是非常令人讨厌的,但是发生了奇怪的事情。

        【讨论】:

        • 可能,但我认为这不太可能。
        • 由于我们的项目依赖性,我使用的是 java.version = 1.5.0_16。
        猜你喜欢
        • 2017-03-08
        • 2016-08-10
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        相关资源
        最近更新 更多