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

Comment exécuter des applications Java à l'échelle supérieure sur un écran à haute résolution ?

J'essaie d'exécuter une application Java (fichier JAR) sur un écran à haute résolution d'image (DPI) sous Windows 10. L'application utilise Swing et n'est donc pas compatible avec le DPI. Normalement, lorsque j'exécute une application qui n'est pas compatible avec le DPI, Windows la met à l'échelle pour moi, bien que de manière floue. Mais pour une raison quelconque, l'application Java n'est pas mise à l'échelle ; j'obtiens juste une toute petite fenêtre dans le coin avec du texte impossible à lire. Comment puis-je lancer une application Java avec la mise à l'échelle (floue) à haute résolution DPI de Windows ?

Réponses (10)

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

Je viens de trouver une solution facile sur ma machine Windows 10 :

  1. Trouvez java.exe que vous avez installé.
  2. Clic droit -> Properties
  3. Allez à Compatibility onglet
  4. Cochez Override high DPI scaling behavior.
  5. Choisissez System pour Scaling performed by:
38
38
38
2015-12-01 18:31:58 +0000

Le problème ici semble être que Swing prétend par défaut qu'il est compatible avec l'IAP, donc Windows ne le met pas à l'échelle. Utilisez ce bouton pour désactiver ce comportement et Windows commencera à redimensionner votre application Swing :

-Dsun.java2d.dpiaware=false

[ EDIT : Malheureusement, ce drapeau ne semble plus fonctionner en Java 8, je le testais en Java 6. Il semble que ce soit un problème connu .] [ EDIT 2 : Vous pouvez modifier une installation de Java 8 pour qu'elle fonctionne correctement, en utilisant un programme pour modifier les manifestes EXE. J'ai changé le paramètre de true à false dans les manifestes de java.exe et javaw.exe, et maintenant mes programmes Swing sont correctement mis à l'échelle dans Windows 10 high dpi. J'ai utilisé Resource Tuner pour cela].

[Edit 3] Il suffit d'utiliser Java 9

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

Si vous êtes tombé sur cette question mais que vous cherchez en fait une solution qui fonctionne sous Linux, ceci est pour vous.

Si vous pouvez ajouter des paramètres au binaire java qui lance l'application, vous pouvez utiliser l'option -D pour passer une valeur pour la propriété sun.java2d.uiScale afin de spécifier un facteur d'échelle pour Java2D. Cela permettra de mettre votre application à l'échelle. La valeur du facteur d'échelle est un double. Assurez-vous que vous passez cette option au binaire java lui-même, et non à l'application Java lancée.

Exemple : Lancez NearInfinity.jar avec un facteur d'échelle de 2,5

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

J'ai trouvé cet article assez utile en général pour faire tourner Linux sur des systèmes HiDPI, et certaines choses pourraient fonctionner sur Windows aussi : https://wiki.archlinux.org/index.php/HiDPI

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

Solution : Faites-le tourner sur JRE 9.

C'est parce que le runtime Java s'est déclaré “DPI-aware” mais ne le supportait pas vraiment pour AWT et Swing. Les applications Java étaient dimensionnées et rendues en fonction des pixels plutôt que d'être correctement mises à l'échelle, ce qui incluait les écrans HiDPI. Quoi qu'il en soit, ce problème a été résolu récemment. Voir le numéro JEP 263 : HiDPI Graphics on Windows and Linux et la mise à jour .

Donc, augmenter la taille de la police ne fonctionne pas (parce que cela n'augmente pas le reste des choses) ; l'argument jvm -Dsun.java2d.dpiaware=false ne fonctionne pas (parce qu'il n'est pas vraiment pris en charge) ; et le fichier manifeste + édition du registre (pour Windows) ne fonctionne tout simplement pas.

Ensuite, vous devez l'exécuter sur le JRE 9 parce qu'il supporte vraiment cette fonctionnalité.

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

Pour forcer tous les exécutables java à avoir des “propriétés > compatibilité > mode de mise à l'échelle des dpi” réglés sur “Système”, dans un powerhell d'administrateur (win-x, a), lancez :

$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}

pour annuler :

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

Au lieu de HKCU vous pourriez utiliser HKLM, mais alors vous ne pouvez plus modifier manuellement le paramètre dpi-scaling dans les propriétés > dialogue de compatibilité des fichiers java*.exe.

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

Vous devez définir PreferExternalManifest dans regedit et créer des manifestes personnalisés pour java.exe et javaw.exe, comme indiqué dans le débordement de pile suivant answe https://stackoverflow.com/a/39372897 .

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

Essayez Java 10.

J'ai trouvé que -Dsun.java2d.dpiaware=false ne fonctionne pas en Java 9 ou 10. Aussi pour Java 8 et 9 mon application swing est petite, mais Java 10 se dimensionne correctement dans les fenêtres !

donc pour une application que vous pouvez lancer depuis un fichier bat comme : java -jar xxx.jar

Je viens d'ajouter JAVA_HOME=….\java_10 et PATH=%JAVA_HOME%\bin;%PATH% dans le fichier bat.

java -jar xxx.jar

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

La solution d'Elderry est bonne, mais que faire si vous voulez exécuter un fichier jar sous Windows et qu'il n'a pas d'options de compatibilité ?

Allez dans C:\Program Files (x86)\Java\jre\bin et trouvez javaw.exe. Cliquez avec le bouton droit, propriétés, onglet de compatibilité, cochez “override high DPI scaling behavior” et sélectionnez “System” (Notez que “System enhanced” n'a pas fonctionné pour moi).

Maintenant, les fenêtres des fichiers jar devraient s'adapter correctement à l'échelle du texte lisible. Sinon, cela pourrait signifier que Windows ne lie pas les fichiers de type jar à javaw.eve comme il le devrait. Un correctif tiers est disponible à l'adresse : https://johann.loefflmann.net/en/software/jarfix/index.html

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

J'ai essayé la plupart de ces solutions, mais celle qui a fonctionné pour moi consistait à régler le mode de compatibilité du système sur les fichiers que je trouvais à l'endroit suivant :

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

J'ai pu obtenir une résolution d'image sensible en utilisant l'invite de commande :

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