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

Wie führe ich Java-Anwendungen hochskaliert auf einem High-DPI-Display aus?

Ich versuche, eine Java-App (JAR-Datei) auf einem High-DPI-Display unter Windows 10 auszuführen. Die App verwendet Swing und ist daher nicht DPI-kompatibel. Wenn ich eine Anwendung ausführe, die nicht DPI-fähig ist, skaliert Windows sie normalerweise für mich, wenn auch unscharf. Aber aus irgendeinem Grund skaliert es die Java-Anwendung nicht; ich erhalte nur ein winziges Fenster in der Ecke mit unlesbarem Text. Wie führe ich eine Java-Anwendung mit der High-DPI-Skalierung (verschwommen) von Windows aus?

Antworten (10)

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

Habe gerade eine einfache Lösung auf meinem Windows 10 Rechner gefunden:

  1. Finden Sie java.exe, das Sie installiert haben.
  2. Klicken Sie mit der rechten Maustaste auf -> Properties
  3. Gehen Sie zur Registerkarte Compatibility
  4. Haken Override high DPI scaling behavior.
  5. Wählen Sie System für Scaling performed by:
38
38
38
2015-12-01 18:31:58 +0000

Das Problem hier scheint zu sein, dass Swing standardmäßig behauptet, dass es DPI-bewusst ist, also skaliert Windows es nicht. Verwenden Sie diesen Schalter, um dieses Verhalten abzuschalten, und Windows beginnt mit der Skalierung Ihrer Swing-App:

-Dsun.java2d.dpiaware=false

[ EDIT 2: Sie können eine Java 8-Installation so modifizieren, dass sie korrekt funktioniert, indem Sie ein Programm verwenden, das die EXE-Manifeste modifiziert. Ich habe die Einstellung von true auf false in den Manifesten innerhalb von java.exe und javaw.exe geändert, und jetzt skalieren meine Swing-Programme korrekt in Windows 10 high dpi. Ich habe dazu Resource Tuner verwendet.]

[Bearbeiten 3] Verwenden Sie einfach Java 9

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

Wenn Sie über diese Frage gestolpert sind, aber eigentlich nach einer Lösung suchen, die unter Linux funktioniert, ist dies für Sie.

Wenn Sie dem java-Binary, das die Anwendung startet, Parameter hinzufügen können, können Sie die Option -D verwenden, um einen Wert für das sun.java2d.uiScale-Proprty zu übergeben, um einen Skalierungsfaktor für Java2D anzugeben. Dadurch wird Ihre Anwendung skaliert. Der Wert des Skalierungsfaktors ist ein Double. Stellen Sie sicher, dass Sie diese Option an das java-Binary selbst übergeben, nicht an die gestartete Java-Anwendung.

Beispiel: Starten Sie NearInfinity.jar mit einem UI-Skalierungsfaktor von 2,5

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

Ich fand diesen Artikel allgemein recht nützlich für den Betrieb von Linux auf HiDPI-Systemen, und einige der Dinge könnten auch unter Windows funktionieren: https://wiki.archlinux.org/index.php/HiDPI

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

Lösung: Führen Sie es unter JRE 9 aus.

Das liegt daran, dass die Java-Laufzeitumgebung sich selbst als “DPI-bewusst” deklariert hat, dies aber für AWT und Swing nicht wirklich unterstützt. Java-Anwendungen wurden auf der Basis von Pixeln skaliert und gerendert, anstatt richtig skaliert zu werden, dies schloss HiDPI-Displays ein. Wie auch immer, dieses Problem wurde kürzlich gelöst. Siehe die Ausgabe JEP 263: HiDPI-Grafiken unter Windows und Linux und die Aktualisierung .

Also, das Erhöhen der Schriftgröße funktioniert nicht (weil es den Rest nicht erhöht); das jvm-Argument -Dsun.java2d.dpiaware=false funktioniert nicht (weil es nicht wirklich unterstützt wird); und die Manifest-Datei + Registry-Edit (für Windows) funktioniert einfach nicht.

Dann müssen Sie es auf JRE 9 laufen lassen, weil es diese Funktion wirklich unterstützt.

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

Um zu erzwingen, dass bei allen ausführbaren Java-Dateien “Eigenschaften > Kompatibilität > dpi-Skalierungsmodus” auf “System” gesetzt wird, führen Sie in einer Administrator-Powershell (win-x, a) aus:

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

Rückgängig machen:

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

Statt HKCU könnten Sie auch HKLM verwenden, aber dann können Sie die dpi-Skalierungseinstellung nicht mehr manuell im Eigenschaften > Kompatibilität-Dialog der java*.exe-Dateien ändern.

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

Sie müssen PreferExternalManifest in regedit festlegen und benutzerdefinierte Manifeste für java.exe und javaw.exe erstellen, wie in der folgenden Stackoverflow-Antwort angegeben https://stackoverflow.com/a/39372897

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

Versuchen Sie Java 10.

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 hat die richtige Größe in Windows!

also für eine App, die man aus einer Bat-Datei wie: java -jar xxx.jar

ausführen kann, habe ich einfach JAVA_HOME=….\java_10 und PATH=%JAVA_HOME%\bin;%PATH% in der Bat-Datei hinzugefügt.

java -jar xxx.jar

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

Die Lösung von Elderry ist gut, aber was ist, wenn Sie eine jar-Datei unter Windows ausführen möchten und es keine Kompatibilitätsoptionen gibt?

Gehen Sie zu C:\Program Files (x86)\Java\jre\bin und suchen Sie javaw.exe. Klicken Sie mit der rechten Maustaste, Eigenschaften, Registerkarte Kompatibilität, markieren Sie “Verhalten bei hoher DPI-Skalierung außer Kraft setzen” und wählen Sie “System” (Beachten Sie, dass “System erweitert” bei mir nicht funktionierte).

Jetzt sollten die Fenster der jar-Datei richtig skaliert und der Text lesbar sein. Falls nicht, könnte es bedeuten, dass Windows Dateien vom Typ jar nicht mit javaw.eve verknüpft, wie es sollte. Ein Drittanbieter-Fix ist verfügbar unter: https://johann.loefflmann.net/en/software/jarfix/index.html

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

Ich habe die meisten dieser Lösungen ausprobiert, aber diejenige, die bei mir funktionierte, war das Einstellen des Systemkompatibilitätsmodus auf die Dateien, die ich an der folgenden Stelle fand:

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

Ich war in der Lage, vernünftige dpi zu erhalten, wenn ich die Eingabeaufforderung wie folgt ausführte:

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