Próbuję uruchomić aplikację Java (plik JAR) na ekranie o wysokiej rozdzielczości w systemie Windows 10. Aplikacja używa Swing, a zatem nie obsługuje DPI. Zwykle po uruchomieniu aplikacji, która nie rozpoznaje DPI, system Windows skaluje ją dla mnie, choć jest rozmazana. Ale z jakiegoś powodu nie skaluje aplikacji Java; Po prostu dostaję małe okienko w rogu z niemożliwym do odczytania tekstem. Jak uruchomić aplikację Java z skalowaniem wysokiej rozdzielczości (rozmycia) systemu Windows?
windows-10
java
high-dpi
Jeff E.
źródło
źródło
Odpowiedzi:
Problem polega na tym, że Swing domyślnie twierdzi, że jest świadomy DPI, więc system Windows nie skaluje go. Użyj tego przełącznika, aby wyłączyć to zachowanie, a system Windows zacznie skalować aplikację swing:
[EDYCJA: Niestety ta flaga nie działa już w Javie 8, testowałem ją w Javie 6. Wygląda na to, że jest to znany problem .]
[EDYCJA 2: Możesz zmodyfikować instalację Java 8, aby działała poprawnie, używając programu do modyfikowania manifestów EXE. Zmieniłem ustawienie z true na false w manifestach w plikach java.exe i javaw.exe, a teraz moje programy Swing poprawnie skalują się w wysokiej rozdzielczości systemu Windows 10. Użyłem do tego tunera zasobów .]
[Edytuj 3] Wystarczy użyć Java 9
źródło
false
, ale aplikacja (JNLP / WebStart) nie skalowała się poprawnie w żaden sposób. Czy możesz pomyśleć o prostym sposobie sprawdzenia, czy to działa, czy nie, np. Aplikacja testowa, o której wiesz, że reaguje na to ustawienie?Właśnie znalazłem łatwe rozwiązanie na moim komputerze z systemem Windows 10:
java.exe
zainstalowany.Properties
Compatibility
zakładkiOverride high DPI scaling behavior.
System
dlaScaling performed by:
źródło
java -jar myJarFile.jar
i wykonałem kroki od 2 do 5 dla tego skrótu (Windows 10, Java 8).javaw.exe
Jeśli natknąłeś się na to pytanie, ale naprawdę szukasz rozwiązania, które działa w systemie Linux, jest to dla Ciebie.
Jeśli możesz dodać parametry do pliku
java
binarnego uruchamiającego aplikację, możesz użyć opcji-D
przekazania wartościsun.java2d.uiScale
właściwości, aby określić współczynnik skalowania dla Java2D. Spowoduje to skalowanie aplikacji. Wartość współczynnika skalowania jest podwójna. Upewnij się, że przekazujesz tę opcję do samegojava
pliku binarnego, a nie do uruchomionej aplikacji Java.Przykład: Uruchom NearInfinity.jar ze współczynnikiem skalowania interfejsu użytkownika wynoszącym 2,5
Uważam, że ten artykuł jest ogólnie przydatny do uruchamiania systemu Linux na systemach HiDPI, a niektóre rzeczy mogą również działać w systemie Windows: https://wiki.archlinux.org/index.php/HiDPI
źródło
Rozwiązanie: Uruchom go w środowisku JRE 9.
Wynika to z faktu, że środowisko wykonawcze Java zadeklarowało się jako „świadome DPI”, ale tak naprawdę nie obsługiwało go dla AWT i Swing. Aplikacje Java były sortowane i renderowane na podstawie pikseli, a nie odpowiednio skalowane, w tym wyświetlacze HiDPI. W każdym razie zostało to niedawno rozwiązane. Zobacz problem JEP 263: Grafika HiDPI w systemach Windows i Linux oraz uaktualnienie .
Tak więc zwiększenie rozmiaru czcionki nie działa (ponieważ nie zwiększa reszty rzeczy); argument jvm
-Dsun.java2d.dpiaware=false
nie działa (ponieważ nie jest tak naprawdę obsługiwany); a plik manifestu + edycja rejestru (dla Windows) po prostu nie działa.Następnie musisz uruchomić go w środowisku JRE 9, ponieważ naprawdę obsługuje tę funkcję.
źródło
Aby zmusić wszystkie pliki wykonywalne Java do ustawienia „właściwości> kompatybilność> tryb skalowania dpi” na „System”, w PowerShell administratora (win-x, a), uruchom:
cofnąć:
Zamiast HKCU można użyć HKLM, ale wtedy nie można już ręcznie zmienić ustawienia skalowania dpi w oknie dialogowym właściwości> kompatybilności plików java * .exe.
źródło
Musisz ustawić PreferExternalManifest w regedit i utworzyć niestandardowe manifesty dla java.exe i javaw.exe, jak podano w poniższej odpowiedzi Stackoverflow https://stackoverflow.com/a/39372897
źródło
Rozwiązanie Elderry jest dobre, ale co, jeśli chcesz uruchomić plik jar w systemie Windows i nie ma opcji zgodności?
Przejdź do C: \ Program Files (x86) \ Java \ jre \ bin i znajdź javaw.exe. Kliknij prawym przyciskiem myszy, właściwości, zakładkę kompatybilności, zaznacz „zastępuj zachowanie skalowania przy wysokiej DPI” i wybierz „System” (zauważ, że „Ulepszony system” nie działał dla mnie).
Teraz okna plików jar powinny poprawnie skalować się z czytelnym tekstem. Jeśli nie, może to oznaczać, że system Windows nie łączy plików typu jar z javaw.eve, jak powinien. Poprawka osoby trzeciej jest dostępna pod adresem : https://johann.loefflmann.net/en/software/jarfix/index.html
źródło
Wypróbuj Java 10.
Odkryłem, że -Dsun.java2d.dpiaware = false nie działa w Javie 9 lub 10. Również w Javie 8 i 9 moja aplikacja swing jest mała, ale Java 10 ma poprawnie rozmiary w systemie Windows!
więc dla aplikacji, którą można uruchomić z pliku nietoperza, takiego jak: java -jar xxx.jar
Właśnie dodałem JAVA_HOME = .... \ java_10 i PATH =% JAVA_HOME% \ bin;% PATH% w pliku bat.
java -jar xxx.jar
źródło
Wypróbowałem większość z tych rozwiązań, ale tym, które działało dla mnie, było ustawienie trybu zgodności systemu dla plików, które znalazłem w następującej lokalizacji:
źródło
java.exe
i / lubjavaw.exe
lub korzystać z innych zaleceń.javapath
Folder zawiera linki do najnowszych plików wykonywalnych Java zainstalowanych w systemie. Dlatego zastosowanie ustawieńProgram Files
powinno wystarczyć.Byłem w stanie uzyskać rozsądną rozdzielczość, gdy uruchomiono go za pomocą wiersza polecenia, takiego jak:
źródło
java.exe
lubjavaw.exe
.