System.getProperty( "os.name" ) 和 System.getProperty( "os.version" ) 在 Windows 11 机器中返回 Windows 10,



System.getProperty("os.name")和System.getProperty("os.version")返回windows 10, 10.0,在windows 11机器

如果有人知道Java代码可以不使用任何命令获得Windows版本,请帮助或附上Java代码在这里。

openjdk version "1.8.0_322"
OpenJDK Runtime Environment Corretto-8.322.06.1 (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM Corretto-8.322.06.1 (build 25.322-b06, mixed mode)
class Demo
{
public static void main(String g[])
{
System.out.println(" os name = "+System.getProperty("os.name"));
System.out.println(" os version = "+System.getProperty("os.version"));
}
}

输出:

os name = Windows 10
os version = 10.0

在Java 11(11.0.15)和Java 17(17.0.3)上,System.getProperty("os.name")返回Windows 11,但"os.version"仍然报告10.0,因为这实际上是Microsoft(仍然)在Windows 11上使用的版本。

例如,Windows System Information报告:

操作系统名称Microsoft Windows 11 Pro
版本10.0.22000 Build 22000

这与你的截图中显示的内容相似。

Java 8(1.8.0_332)仍然报告Windows 10。我已经查看了Java 8中可用的系统属性和环境变量,但是似乎没有一个属性或环境变量可以让你检测到你使用的是Windows 11而不是Windows 10。

JDK-8293124更新操作系统检测代码以识别Windows 11的后端口列表表明,这应该在Java 8更新8u311, 8u321和8u331中得到修复。但是考虑到我仍然在1.8.0_332 (Temurin)和1.8.0_345 (Temurin)中得到旧的结果,这个修复要么被恢复,要么只在特定的构建(例如Oracle的)中可用。它还列出了尚未发布的openjdk8u362,所以这个修复可能会在1.8.0_362中到达。

最新更新