J'essaie d'exécuter une application Java (fichier JAR) sur un écran à haute résolution (DPI) sous Windows 10. L'application utilise Swing et n'est donc pas compatible avec la DPI. Normalement, lorsque j'exécute une application qui ne tient pas compte de la DPI, Windows la met à l'échelle pour moi, mais de façon 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 un texte impossible à lire. Comment puis-je exécuter une application Java avec la mise à l'échelle (floue) à haute résolution de Windows ?
Réponses
Trop de publicités?Le problème ici semble être que Swing prétend par défaut qu'il est conscient de la DPI, donc Windows ne le met pas à l'échelle. Utilisez ce commutateur pour désactiver ce comportement et Windows commencera à mettre à l'échelle 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 Java 8 pour qu'elle fonctionne correctement, en utilisant un programme pour modifier les manifestes EXE. J'ai changé le paramètre de true (vrai) à false (faux) dans les manifestes à l'intérieur de java.exe et javaw.exe, et maintenant mes programmes Swing s'échelonnent correctement dans Windows 10 high dpi. J'ai utilisé Tuner de ressources à cela.]
[Edit 3] Utilisez simplement Java 9
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 à l java
qui lance l'application, vous pouvez utiliser l'option -D
pour passer une valeur pour le sun.java2d.uiScale
proprité pour 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 à la méthode java
lui-même, et non l'application Java lancée.
Exemple : Lancez NearInfinity.jar avec un facteur d'échelle de l'interface utilisateur de 2,5.
java -Dsun.java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar
Vous pouvez également définir l'option GDK_SCALE
variable d'environnement. Exemple :
GDK_SCALE=2 java -jar ~/jars/NearInfinity.jar
J'ai trouvé cet article du ArchLinux Wiki assez utile en général pour faire tourner Linux sur des systèmes HiDPI, et certaines des choses pourraient fonctionner sous Windows également.
Solution : Exécutez-le sous JRE 9.
Cela s'explique par le fait que le moteur d'exécution Java s'est déclaré "conscient de la DPI" mais ne l'a pas vraiment pris en charge 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, y compris pour les écrans HiDPI. Quoi qu'il en soit, ce problème a été récemment résolu. Voir le problème JEP 263 : Graphiques HiDPI sur Windows et Linux et le mise à niveau .
Ainsi, 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 (car il n'est pas vraiment pris en charge) ; et le fichier manifeste + modification du registre (pour Windows) ne fonctionne tout simplement pas.
Ensuite, vous devez l'exécuter sur JRE 9 car il supporte vraiment cette fonctionnalité.
Pour forcer tous les exécutables java à avoir "properties > compatibility > dpi scaling mode" défini sur "System", dans un powershell administrateur (win-x, a), exécutez :
$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 défaire :
$javaexes | foreach {REG delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /f}
Au lieu de HKCU, vous pouvez utiliser HKLM, mais vous ne pourrez plus modifier manuellement le paramètre de mise à l'échelle des ppp dans la boîte de dialogue Propriétés > Compatibilité des fichiers java*.exe.
- Réponses précédentes
- Plus de réponses