Estoy tratando de ejecutar una aplicación Java (archivo JAR) en una pantalla de alto DPI en Windows 10. La aplicación usa Swing y, por lo tanto, no es compatible con DPI. Normalmente, cuando ejecuto una aplicación que no es compatible con DPI, Windows la escalará por mí, aunque sea borrosa. Pero por alguna razón no está escalando la aplicación Java; Acabo de recibir una pequeña ventana en la esquina con texto imposible de leer. ¿Cómo ejecuto una aplicación Java con la escala de alta DPI (borrosa) de Windows?
windows-10
java
high-dpi
Jeff E
fuente
fuente
Respuestas:
El problema aquí parece ser que Swing afirma por defecto que es compatible con DPI, por lo que Windows no lo escala. Use este interruptor para desactivar este comportamiento y Windows comenzará a escalar su aplicación swing:
[EDITAR: Desafortunadamente, este indicador ya no parece funcionar en Java 8, lo estaba probando en Java 6. Parece que este es un problema conocido .]
[EDIT 2: puede modificar una instalación de Java 8 para que funcione correctamente, utilizando un programa para modificar los manifiestos EXE. Cambié la configuración de verdadero a falso en los manifiestos dentro de java.exe y javaw.exe, y ahora mis programas Swing se escalan correctamente en Windows 10 de alta resolución. Solía sintonizador de recursos a este.]
[Editar 3] Solo use Java 9
fuente
false
, pero la aplicación (JNLP / WebStart) no se ajustó correctamente de ninguna manera. ¿Puedes pensar en una forma simple de verificar si esto funciona o no, por ejemplo, una aplicación de prueba que conoces que responde a esta configuración?Acabo de encontrar una solución fácil en mi máquina con Windows 10:
java.exe
instalado.Properties
Compatibility
pestañaOverride high DPI scaling behavior.
System
paraScaling performed by:
fuente
java -jar myJarFile.jar
e hice los pasos 2 a 5 en ese acceso directo (Windows 10, Java 8).javaw.exe
Si tropezó con esta pregunta pero en realidad está buscando una solución que funcione en Linux, esto es para usted.
Si puede agregar parámetros al
java
binario que inicia la aplicación, puede usar la opción-D
para pasar un valor para lasun.java2d.uiScale
propiedad para especificar un factor de escala para Java2D. Esto escalará su aplicación. El valor del factor de escala es un doble. Asegúrese de pasar esta opción aljava
binario en sí, no a la aplicación Java iniciada.Ejemplo: Inicie NearInfinity.jar con un factor de escala de IU de 2.5
Este artículo me pareció bastante útil en general para ejecutar Linux en sistemas HiDPI, y algunas de las cosas también podrían funcionar en Windows: https://wiki.archlinux.org/index.php/HiDPI
fuente
Solución: ejecútelo en JRE 9.
Esto se debe a que el tiempo de ejecución de Java se declaró "consciente de DPI", pero realmente no lo admitió para AWT y Swing. Las aplicaciones Java fueron dimensionadas y renderizadas en base a píxeles en lugar de ser escaladas adecuadamente, esto incluía pantallas HiDPI. De todos modos, esto se ha resuelto recientemente. Consulte el problema JEP 263: Gráficos HiDPI en Windows y Linux y la actualización .
Por lo tanto, aumentar el tamaño de fuente no funciona (porque no aumenta el resto de las cosas); el argumento jvm
-Dsun.java2d.dpiaware=false
no funciona (porque realmente no es compatible); y el archivo de manifiesto + edición de registro (para Windows) simplemente no funciona.Luego, debe ejecutarlo en JRE 9 porque realmente admite esta función.
fuente
Para forzar a todos los ejecutables de Java a que tengan "propiedades> compatibilidad> modo de escala de ppp" configurado en "Sistema", en un administrador powershell (win-x, a), ejecute:
deshacer:
En lugar de HKCU, puede usar HKLM, pero ya no puede cambiar la configuración de escala de ppp manualmente en el cuadro de diálogo de propiedades> compatibilidad de los archivos java * .exe.
fuente
Debe configurar PreferExternalManifest en regedit y crear manifiestos personalizados para java.exe y javaw.exe como se indica en la siguiente respuesta stackoverflow https://stackoverflow.com/a/39372897
fuente
La solución de Elderry es buena, pero ¿qué sucede si desea ejecutar un archivo jar en Windows y no tiene opciones de compatibilidad?
Vaya a C: \ Archivos de programa (x86) \ Java \ jre \ bin y busque javaw.exe. Haga clic derecho, propiedades, pestaña de compatibilidad, marque "anular el comportamiento de escalado de DPI alto" y seleccione "Sistema" (Tenga en cuenta que "Sistema mejorado" no funcionó para mí).
Ahora las ventanas del archivo jar deberían escalar correctamente con texto legible. De lo contrario, podría significar que Windows no vincula los archivos de tipo jar a javaw.eve como debería. Una solución de terceros está disponible en: https://johann.loefflmann.net/en/software/jarfix/index.html
fuente
Prueba Java 10.
Descubrí que -Dsun.java2d.dpiaware = false no funciona en Java 9 o 10. También para Java 8 y 9 mi aplicación swing es pequeña, ¡pero Java 10 se ajusta correctamente en Windows!
así que para una aplicación que puede ejecutar desde un archivo bat como: java -jar xxx.jar
Acabo de agregar JAVA_HOME = .... \ java_10 y PATH =% JAVA_HOME% \ bin;% PATH% en el archivo bat.
java -jar xxx.jar
fuente
Probé la mayoría de estas soluciones, pero la que funcionó para mí fue configurar el modo de compatibilidad del sistema en los archivos que encontré en la siguiente ubicación:
fuente
java.exe
y / ojavaw.exe
o utilizar otras recomendaciones. Lajavapath
carpeta contiene enlaces a los últimos ejecutables de Java instalados en el sistema. Por lo tanto, aplicar la configuración enProgram Files
debería ser suficiente.Pude obtener ppp sensibles cuando lo ejecuté usando el símbolo del sistema como:
fuente
java.exe
ojavaw.exe
.