最近我搬到了一台全新的 64 位 Windows 7 机器上。但是当我运行这段代码时,得到不正确的操作系统名称
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
}
它适用于我的 Windows 7 机器(诚然是 32 位机器;我现在无法访问 64 位机器)。
也许您的 JRE 早于 Windows 7,并且名称已融入其中?您使用的是哪个版本的 JRE?我建议更新到最新版本并重试。诚然,如果 JRE确实将操作系统名称硬编码到其中,那是非常令人讨厌的,但是发生了奇怪的事情。
使用 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。
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);
}