web-dev-qa-db-fra.com

Comment puis-je exécuter des applications Java sur un écran haute résolution avec une résolution supérieure?

J'essaie d'exécuter une application Java (fichier JAR) sur un écran haute résolution sous Windows 10. L'application utilise Swing et n'est donc pas compatible DPI. Normalement, lorsque j'exécute une application qui n'est pas compatible DPI, Windows la redimensionne pour moi, même si elle est floue. Mais pour une raison quelconque, l'application Java n'est pas mise à l'échelle. Je viens d'avoir une petite fenêtre dans le coin avec un texte impossible à lire. Comment exécuter une application Java avec la mise à l'échelle haute résolution (flou) de Windows?

69
Jeff E

Le problème ici semble être que Swing affirme par défaut qu'il est conscient de la DPI, donc Windows ne le redimensionne pas. 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 l’étais en train de le tester en Java 6. On dirait que c’est un problème connu .]

[EDIT 2: Vous pouvez modifier une installation Java 8 pour qu'elle fonctionne correctement, à l'aide d'un programme permettant de modifier les manifestes EXE. J'ai modifié le paramètre de true à false dans les manifestes à l'intérieur de Java.exe et de javaw.exe. Désormais, mes programmes Swing évoluent correctement sous Windows 10 en haute résolution. J'ai utilisé Resource Tuner à cela.]

[Edit 3] Il suffit d'utiliser Java 9

33
CarlG

Je viens de trouver une solution facile sur mon ordinateur Windows 10:

  1. Trouvez Java.exe que vous avez installé.
  2. Clic droit -> Properties
  3. Aller à l'onglet Compatibility
  4. Vérifier Override high DPI scaling behavior.
  5. Choisissez System pour Scaling performed by:
59
Elderry

Si vous êtes tombé sur cette question mais êtes réellement à la recherche d’une solution qui fonctionne sous Linux, c’est pour vous.

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

Exemple: Lancez NearInfinity.jar avec un facteur de mise à l'échelle de l'interface utilisateur de 2,5

Java -Dsun.Java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar

J'ai trouvé cet article plutôt utile en général pour exécuter Linux sur les systèmes HiDPI, et certaines choses pourraient également fonctionner sous Windows: https://wiki.archlinux.org/index.php/HiDPI

12
Christian Hujer

Solution: exécutez-le sur JRE 9.

En effet, le moteur d'exécution Java s'est déclaré "compatible DPI" mais ne l'a pas vraiment pris en charge pour AWT et Swing. Les applications Java ont été dimensionnées et rendues en pixels plutôt que d'être correctement mises à l'échelle, ce qui inclut les écrans HiDPI. Quoi qu'il en soit, cela a été résolu récemment. Voir le problème JEP 263: HiDPI Graphics sous Windows et Linux et la upgrade .

Donc, augmenter la taille de la police ne fonctionne pas (car 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 prend réellement en charge cette fonctionnalité.

10
Sergio Muriel

Pour forcer tous les exécutables Java à "propriétés> compatibilité> mode de redimensionnement dpi" définis sur "Système", dans un PowerShell d'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}

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 pouvez plus modifier manuellement le paramètre de mise à l'échelle dpi dans la boîte de dialogue propriétés> compatibilité des fichiers Java * .exe.

4
masterxilo

Vous devez définir PreferExternalManifest dans regedit et créer des manifestes personnalisés pour Java.exe et javaw.exe, comme indiqué dans le message stackoverflow suivant answer https://stackoverflow.com/a/39372897

2
droidlabel

Merci pour Kenneth. Je trouve C:\Program Files (x86)\Java\jre\bin\Java.exe puis right click -> properties -> compatibility tab -> "override high DPI scaling behavior" et sélectionnez System, puis cela fonctionne. J'ai également essayé de la même manière de modifier la compatibilité de javaw.exe, cela fonctionne également.

PS: Je lance burpsuite.jar sur win10 1703 en utilisant cette méthode.

2
xile

La solution Elderry est bonne, mais que se passe-t-il si vous souhaitez exécuter un fichier jar sous Windows sans options de compatibilité?

Accédez à C:\Program Files (x86)\Java\jre\bin et recherchez javaw.exe. Cliquez avec le bouton droit de la souris sur Propriétés, onglet Compatibilité, cochez la case "Remplacer le comportement de redimensionnement DPI élevé" et sélectionnez "Système" (notez que "Système amélioré" ne fonctionnait pas pour moi).

Les fenêtres de fichiers jar doivent maintenant s’adapter correctement avec un texte lisible. Sinon, cela pourrait signifier que Windows ne lie pas les fichiers de type jar à javaw.eve comme il se doit. Un correctif tiers est disponible à l’adresse: https://johann.loefflmann.net/fr/software/jarfix/index.html

0
Kenneth

Essayez Java 10.

J'ai trouvé que -Dsun.Java2d.dpiaware = false ne fonctionne pas sous Java 9 ou 10. De plus, pour Java 8 et 9, mon application est petite, mais Java 10 se taille correctement dans Windows!

donc pour une application que vous pouvez exécuter à partir d'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
Stan Towianski