Ich versuche, eine Java-App (JAR-Datei) auf einem hochauflösenden Display unter Windows 10 auszuführen. Die App verwendet Swing und ist daher nicht DPI-fähig. Normalerweise skaliert Windows eine Anwendung, die nicht DPI-fähig ist, für mich, wenn auch verschwommen. Aber aus irgendeinem Grund skaliert es die Java-App nicht. Ich bekomme nur ein kleines Fenster in der Ecke mit unlesbarem Text. Wie starte ich eine Java-App mit der hochauflösenden (verschwommenen) Skalierung von Windows?
windows-10
java
high-dpi
Jeff E
quelle
quelle
Antworten:
Das Problem hier scheint zu sein, dass Swing standardmäßig behauptet, DPI-fähig zu sein, sodass Windows es nicht skaliert. Verwenden Sie diesen Schalter, um dieses Verhalten zu deaktivieren und Windows startet die Skalierung Ihrer Swing-App:
[BEARBEITEN: Leider scheint dieses Flag in Java 8 nicht mehr zu funktionieren, ich habe es in Java 6 getestet. Dies scheint ein bekanntes Problem zu sein .]
[BEARBEITEN 2: Sie können eine Java 8-Installation so ändern, dass sie ordnungsgemäß funktioniert. Verwenden Sie dazu ein Programm, um die EXE-Manifeste zu ändern. Ich habe die Einstellung in den Manifesten in java.exe und javaw.exe von true auf false geändert, und jetzt werden meine Swing-Programme in Windows 10 mit hoher Auflösung korrekt skaliert. Ich habe dazu Resource Tuner verwendet .]
[Bearbeiten 3] Verwenden Sie einfach Java 9
quelle
false
, aber die Anwendung (JNLP / WebStart) wurde in keiner Weise richtig skaliert. Können Sie sich eine einfache Möglichkeit vorstellen, um zu überprüfen, ob dies funktioniert oder nicht, z. B. eine Test-App, von der Sie wissen, dass sie auf diese Einstellung reagiert?Ich habe gerade eine einfache Lösung für meinen Windows 10-Computer gefunden:
java.exe
dich installiert.Properties
Compatibility
RegisterkarteOverride high DPI scaling behavior.
System
fürScaling performed by:
quelle
java -jar myJarFile.jar
und die Schritte 2 bis 5 für diese Verknüpfung ausgeführt (Windows 10, Java 8).javaw.exe
Wenn Sie über diese Frage gestolpert sind, aber tatsächlich nach einer Lösung suchen, die unter Linux funktioniert, sind Sie hier richtig.
Wenn Sie der
java
Binärdatei, die die Anwendung startet , Parameter hinzufügen können , können Sie mit der Option-D
einen Wert für diesun.java2d.uiScale
Eigenschaft übergeben, um einen Skalierungsfaktor für Java2D anzugeben. Dadurch wird Ihre Anwendung skaliert. Der Skalierungsfaktor ist doppelt so hoch. Stellen Sie sicher, dass Sie diese Option an diejava
Binärdatei selbst übergeben, nicht an die gestartete Java-Anwendung.Beispiel: Starten Sie NearInfinity.jar mit einem UI-Skalierungsfaktor von 2,5
Ich fand diesen Artikel im Allgemeinen sehr nützlich, um Linux auf HiDPI-Systemen auszuführen, und einige Dinge könnten auch unter Windows funktionieren: https://wiki.archlinux.org/index.php/HiDPI
quelle
Lösung: Führen Sie es auf JRE 9 aus.
Dies liegt daran, dass sich die Java-Laufzeit als "DPI-fähig" deklariert hat, dies aber für AWT und Swing nicht wirklich unterstützt hat. Java-Anwendungen wurden nicht richtig skaliert, sondern auf der Basis von Pixeln skaliert und gerendert. Dazu gehörten auch HiDPI-Anzeigen. Sowieso ist dieses vor kurzem gelöst worden. Siehe die Ausgabe JEP 263: HiDPI-Grafik unter Windows und Linux und das Upgrade .
Das Erhöhen der Schriftgröße funktioniert also nicht (weil es den Rest der Dinge nicht vergrößert). das Argument jvm
-Dsun.java2d.dpiaware=false
funktioniert nicht (weil es nicht wirklich unterstützt wird); und die Manifest-Datei + Registry-Bearbeitung (für Windows) funktioniert einfach nicht.Dann müssen Sie es auf JRE 9 ausführen, da es diese Funktion wirklich unterstützt.
quelle
Führen Sie in einer Administrator-PowerShell (win-x, a) die folgenden Schritte aus, um zu erzwingen, dass für alle ausführbaren Java-Dateien "Eigenschaften> Kompatibilität> dpi-Skalierungsmodus" die Option "System" festgelegt ist:
rückgängig machen:
Anstelle von HKCU können Sie auch HKLM verwenden. In diesem Fall können Sie die Einstellung für die dpi-Skalierung im Dialogfeld Eigenschaften> Kompatibilität der java * .exe-Dateien nicht mehr manuell ändern.
quelle
Sie müssen PreferExternalManifest in regedit festlegen und benutzerdefinierte Manifeste für java.exe und javaw.exe erstellen, wie in der folgenden Antwort auf stackoverflow https://stackoverflow.com/a/39372897 angegeben
quelle
Die Lösung von Elderry ist gut, aber was ist, wenn Sie eine JAR-Datei unter Windows ausführen möchten und keine Kompatibilitätsoptionen vorhanden sind?
Gehen Sie zu C: \ Programme (x86) \ Java \ jre \ bin und suchen Sie nach javaw.exe. Klicken Sie mit der rechten Maustaste auf Eigenschaften, Registerkarte Kompatibilität, aktivieren Sie das Kontrollkästchen "Skalierungsverhalten bei hohen DPI-Werten überschreiben" und wählen Sie "System" aus (beachten Sie, dass "System erweitert" bei mir nicht funktioniert hat).
JAR-Dateifenster sollten jetzt korrekt mit lesbarem Text skaliert werden. Wenn nicht, kann dies bedeuten, dass Windows JAR-Dateien nicht wie gewünscht mit javaw.eve verknüpft. Ein Fix für einen Drittanbieter ist verfügbar unter: https://johann.loefflmann.net/en/software/jarfix/index.html
quelle
Probieren Sie Java 10 aus.
Ich habe festgestellt, dass -Dsun.java2d.dpiaware = false in Java 9 oder 10 nicht funktioniert. Auch für Java 8 und 9 ist meine Swing-App klein, aber Java 10-Größen in Windows richtig!
Also für eine App, die Sie aus einer Fledermausdatei wie folgt ausführen können: java -jar xxx.jar
Ich habe gerade JAVA_HOME = .... \ java_10 und PATH =% JAVA_HOME% \ bin;% PATH% in die bat-Datei eingefügt.
java -jar xxx.jar
quelle
Ich habe die meisten dieser Lösungen ausprobiert, aber die für mich funktionierende Lösung bestand darin, den Systemkompatibilitätsmodus für die Dateien festzulegen, die ich an folgendem Speicherort gefunden habe:
quelle
java.exe
und /javaw.exe
oder diese verwendet werden. Derjavapath
Ordner enthält Links zu den neuesten auf dem System installierten ausführbaren Java-Dateien. Das Anwenden der Einstellungen inProgram Files
sollte also ausreichen.Ich war in der Lage, vernünftige dpi zu bekommen, wenn ich mit der Eingabeaufforderung lief, wie:
quelle
java.exe
oderjavaw.exe
.