para gratis descargar java operating-system jvm windows-10 getproperty

gratis - "Os.name" de Java para Windows 10?



java 8 (3)

Este es definitivamente un error conocido. Ocurre porque la propiedad os.name obtiene su valor de GetVersionEx en el código fuente de la API de Windows. GetVersionEx sin embargo,

puede estar alterado o no disponible para lanzamientos después de Windows 8.1

Según el sitio web oficial de Microsoft. En su lugar, necesitaremos usar el IsWindows10OrGreater encuentra en las funciones de la API de Version Helper en el archivo versionhelpers.h . Sin embargo, como ya habrás adivinado, este archivo no es un archivo Java, está escrito en C. Como resultado, debemos incluirlo de una manera un tanto indirecta. Requiere bastante trabajo (necesita programar en JNI: /) pero este tutorial lo ayudará a hacerlo. Otra solución se muestra en este registro de errores , y requiere menos esfuerzo.

En Java, podemos ver el valor de la propiedad de os.name para conocer el nombre del sistema operativo subyacente: System.getProperty("os.name") .

Para cada edición de Windows, solía devolver siempre el nombre exacto del sistema operativo: Windows XP para XP, Windows Vista para Vista, Windows 7 para Seven, Windows 8.1 para 8.1, y así sucesivamente ...

El problema es que acabo de actualizar mi Windows 8.1 a Windows 10 utilizando el actualizador de Microsoft, y parece que esta propiedad sigue siendo Windows 8.1 :

public class OSTest { public static void main(String[] args) { System.out.println(System.getProperty("os.name")); } }

¿Cómo puedo crear una solución para esto? Y, ¿alguien sabe si este problema persiste si instala una nueva copia de Windows 10, es decir, este error es causado por el actualizador automático de Microsoft?


Este es un problema conocido JDK-8066504 que se ha corregido en la próxima actualización de Java 8 60.

El motivo es que la función GetVersionEx ha cambiado su comportamiento desde Windows 8.1.

Hay varias soluciones posibles, consulte el artículo de MSDN .

El más trivial es ejecutar cmd.exe /c ver .

El otro es mirar la información de versión de uno de los archivos del sistema, por ejemplo kernel32.dll .


También podría usar el método .contains() y simplemente verificar la cadena "windows" tal vez a lo largo de las líneas de

if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains(windows version here [xp, 7, 8, etc]))){}

Si necesita la versión de Windows, puede verificar todas las versiones y luego asumir 8.1 o 10 para moverse por el error.

if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains("xp")){ //code for windows xp } else if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains("vista")){ //code for windows vista else if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains("7")){ //code for windows 7} else if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains("8")){ //code for windows 8} else if (System.getProperty("os.name").toLowerCase().contains("windows") && System.getProperty("os.name").toLowerCase().contains("8.1")){ //code for both windows 8.1 and 10 }

Ahora para explicar lo que está pasando aquí:

  1. la instrucción if es solo un condicional para determinar la versión de Windows

  2. System.getProperty("os.name") devuelve el nombre del sistema System.getProperty("os.name") como una cadena

  3. El método .toLowerCase() hace que la cadena inferior devuelta en minúscula

  4. El .contains(String) comprueba si la cadena de entrada dada está contenida en la cadena a la que se llama.

  5. La última declaración permite un código diferente para cada sistema operativo, excepto 8.1 y 10, que deberían manejarse como un bloque :(