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?
windows-10
java
high-dpi
Jeff E
la source
la source
Réponses:
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:
[EDIT: Malheureusement, ce drapeau ne semble plus fonctionner en Java 8, je le testais 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 changé 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 dans Windows 10 haute résolution. J'ai utilisé Resource Tuner pour cela.]
[Edit 3] Il suffit d'utiliser Java 9
la source
false
, mais l'application (JNLP / WebStart) n'a pas été mise à l'échelle correctement. Pouvez-vous penser à un moyen simple de vérifier si cela fonctionne ou non, par exemple une application de test que vous connaissez qui répond à ce paramètre?Je viens de trouver une solution facile sur mon ordinateur Windows 10:
java.exe
vous installé.Properties
Compatibility
ongletOverride high DPI scaling behavior.
System
pourScaling performed by:
la source
java -jar myJarFile.jar
et effectué les étapes 2 à 5 de ce raccourci (Windows 10, Java 8).javaw.exe
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
java
binaire qui lance l'application, vous pouvez utiliser l'option-D
pour transmettre une valeur à lasun.java2d.uiScale
propriété 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 aujava
binaire lui-même, pas à l'application Java lancée.Exemple: Lancez NearInfinity.jar avec un facteur de mise à l'échelle de l'interface utilisateur de 2,5
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
la source
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 PEC 263: Graphiques HiDPI sous Windows et Linux et la mise à niveau .
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 supporté); 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é.
la source
Pour forcer tous les exécutables java à définir "propriétés> compatibilité> mode de redimensionnement dpi" sur "Système", dans un PowerShell d'administrateur (win-x, a), exécutez:
défaire:
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.
la source
Vous devez définir PreferExternalManifest dans regedit et créer des manifestes personnalisés pour java.exe et javaw.exe, comme indiqué dans la réponse suivante de stackoverflow https://stackoverflow.com/a/39372897
la source
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 suivante : https://johann.loefflmann.net/fr/software/jarfix/index.html
la source
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
la source
J'ai essayé la plupart de ces solutions, mais celle qui a fonctionné pour moi a été de définir le mode de compatibilité système sur les fichiers trouvés à l'emplacement suivant:
la source
java.exe
et / oujavaw.exe
ou utiliser d' autres recommandations. Lejavapath
dossier contient des liens vers les derniers exécutables Java installés sur le système. Ainsi, appliquer les paramètresProgram Files
devrait suffire.J'ai réussi à obtenir une résolution dpi sensible lors de l'exécution à l'aide d'une invite de commande telle que:
la source
java.exe
oujavaw.exe
.