2015-10-18 16:43:09 +0000 2015-10-18 16:43:09 +0000
81
81
Advertisement

¿Cómo puedo ejecutar aplicaciones Java en una pantalla de alta densidad de píxeles?

Advertisement

Estoy tratando de ejecutar una aplicación Java (archivo JAR) en una pantalla de alta DPI en Windows 10. La aplicación utiliza Swing y por lo tanto no es DPI-aware. Normalmente, cuando ejecuto una aplicación que no es consciente de los DPI, Windows la escalará por mí, aunque de forma borrosa. Pero, por alguna razón, no escala la aplicación Java; sólo me aparece una pequeña ventana en la esquina con un texto imposible de leer. ¿Cómo puedo ejecutar una aplicación Java con el escalado de Windows en alta DPI (borroso)?

Advertisement

Respuestas (10)

77
77
77
2017-05-10 18:10:25 +0000

Acabo de encontrar una solución fácil en mi máquina Windows 10:

  1. Encuentra el java.exe que has instalado.
  2. Haga clic derecho -> Properties
  3. Ir a la pestaña Compatibility
  4. Comprobar Override high DPI scaling behavior.
  5. Elegir System para Scaling performed by:
38
38
38
2015-12-01 18:31:58 +0000

El problema aquí parece ser que Swing por defecto afirma que es consciente de DPI, por lo que windows no lo escala. Utilice este interruptor para desactivar este comportamiento y windows comenzará a escalar su aplicación swing:

-Dsun.java2d.dpiaware=false

[ EDIT: Desafortunadamente, este indicador ya no parece funcionar en Java 8, lo estaba probando en Java 6. Parece que es un problema conocido]. [ EDIT 2: Se puede modificar una instalación de Java 8 para que funcione correctamente, utilizando un programa para modificar los manifiestos EXE. He cambiado la configuración de true a false en los manifiestos dentro de java.exe y javaw.exe, y ahora mis programas Swing se escalan correctamente en Windows 10 de alta ppp. He utilizado Resource Tuner a esto].

[Editar 3] Sólo use Java 9

15
Advertisement
15
15
2017-04-02 09:11:49 +0000

Si te has topado con esta pregunta pero estás buscando una solución que funcione en Linux, esto es para ti. Si puedes añadir parámetros al binario java que lanza la aplicación, puedes usar la opción -D para pasar un valor para la proprción sun.java2d.uiScale para especificar un factor de escalado para Java2D. Esto escalará su aplicación. El valor del factor de escala es un doble. Asegúrese de pasar esta opción al propio binario java, no a la aplicación Java lanzada.

Ejemplo: Lanzar NearInfinity.jar con un factor de escalado de UI de 2.5

java -Dsun.java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar

Encontré este artículo bastante útil en general para ejecutar Linux en sistemas HiDPI, y algunas de las cosas podrían funcionar en Windows también: https://wiki.archlinux.org/index.php/HiDPI

11
11
11
2017-08-01 00:05:58 +0000

Solución: Ejecutarlo en JRE 9.

Esto se debe a que el tiempo de ejecución de Java se declaró a sí mismo como “DPI-aware” pero no lo soportó realmente para AWT y Swing. Las aplicaciones Java eran dimensionadas y renderizadas en base a píxeles en lugar de ser escaladas adecuadamente, esto incluía las pantallas HiDPI. De todos modos, esto se ha resuelto recientemente. Ver el número JEP 263: HiDPI Graphics on Windows and Linux y la actualización .

Entonces, aumentar el tamaño de la fuente no funciona (porque no aumenta el resto de las cosas); el argumento jvm -Dsun.java2d.dpiaware=false no funciona (porque no está realmente soportado); y el archivo de manifiesto + edición del registro (para Windows) simplemente no funciona.

Entonces, necesitas ejecutarlo en JRE 9 porque realmente soporta esta característica.

4
Advertisement
4
4
2017-12-13 12:08:20 +0000

Para forzar que todos los ejecutables de java tengan “propiedades > compatibilidad > modo de escalado de ppp” establecido en “Sistema”, en un powershell de administrador (win-x, a), ejecute:

$javaexes = (Get-ChildItem -path "$env:ProgramFiles\Java","${env:ProgramFiles(x86)}\java" -filter java?.exe -recurse | Where-Object {$_.Name -match "java(|w).exe"} ).fullname

$javaexes | foreach {REG ADD "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /T REG_SZ /D "~ DPIUNAWARE" /F}

para deshacer:

$javaexes | foreach {REG delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /f}

En lugar de HKCU podría usar HKLM, pero entonces ya no podrá cambiar la configuración de escalado de ppp manualmente en el diálogo de propiedades > de compatibilidad de los archivos java*.exe.

2
2
2
2017-01-08 17:29:02 +0000

Debe configurar PreferExternalManifest en regedit y crear manifiestos personalizados para java.exe y javaw.exe como se indica en la siguiente respuesta de stackoverflow https://stackoverflow.com/a/39372897

0
Advertisement
0
0
2018-07-07 21:40:12 +0000

Prueba con Java 10.

He descubierto que -Dsun.java2d.dpiaware=false no funciona en Java 9 o 10. Además, para Java 8 y 9 mi aplicación swing es pequeña, pero Java 10 tiene un tamaño adecuado en Windows.

así que para una aplicación que se puede ejecutar desde un archivo bat como: java -jar xxx.jar

Acabo de añadir JAVA_HOME=….\java_10 y PATH=%JAVA_HOME%\bin;%PATH% en el archivo bat.

java -jar xxx.jar

0
0
0
2018-02-04 04:21:52 +0000

La solución de Elderry es buena, pero ¿qué pasa si quieres ejecutar un archivo jar en Windows y no tiene opciones de compatibilidad?

Vaya a C:\NProgram Files (x86)\NJava\jre\bin y encuentre javaw.exe. Haz clic con el botón derecho, propiedades, pestaña de compatibilidad, marca “anular el comportamiento de escalado de DPI alto” y selecciona “Sistema” (Ten en cuenta que “Sistema mejorado” no me ha funcionado).

Ahora las ventanas del archivo jar deberían escalarse correctamente con texto legible. Si no es así, puede significar que Windows no vincula los archivos de tipo jar con javaw.eve como debería. Una solución de terceros está disponible en: https://johann.loefflmann.net/en/software/jarfix/index.html

-2
Advertisement
-2
-2
2018-11-30 15:06:18 +0000

Intenté la mayoría de estas soluciones, pero la que me funcionó fue poner el modo de compatibilidad del sistema en los archivos que encontré en la siguiente ubicación:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath
-4
-4
-4
2016-08-03 22:14:50 +0000

Yo era capaz de obtener sensible dpi cuando se ejecuta a través de símbolo del sistema como:

%SystemRoot%\system32\cmd.exe /C C:\your.file.path\yourJarFile.jar
Advertisement
Advertisement