Я пытаюсь запустить приложение Java (файл JAR) на дисплее с высоким разрешением в Windows 10. Приложение использует Swing и поэтому не поддерживает DPI. Обычно, когда я запускаю приложение, которое не поддерживает DPI, Windows масштабирует его для меня, хотя и размытым. Но по какой-то причине это не масштабирование приложения Java; я просто получаю крошечное маленькое окно в углу с невозможным для чтения текстом. Как запустить приложение Java с масштабированием Windows с высоким разрешением (размыто)?
Как выполнить масштабирование приложений Java на дисплее с высоким разрешением?
10 ответов
проблема здесь, кажется, в том, что Swing по умолчанию утверждает, что он поддерживает DPI, поэтому windows не масштабирует его. Используйте этот параметр, чтобы отключить это поведение и windows начнет масштабирование приложения swing:
-Dsun.java2d.dpiaware=false
[EDIT: к сожалению, этот флаг больше не работает в Java 8, я тестировал его в Java 6. Похоже, что это известная проблема.]
[EDIT 2: Вы можете изменить установку Java 8 для правильной работы, используя программу для изменения EXE-файла проявляется. Я изменил настройку с true на false в манифестах внутри java.exe и javaw.exe, и теперь мои программы Swing масштабируются правильно в Windows 10 с высоким разрешением. Я использовал Ресурс Тюнер для этого.]
[Edit 3] Просто используйте Java 9
только что нашел простое решение на моей машине Windows 10:
- найти
java.exe
установлен. - щелкните правой кнопкой мыши ->
Properties
- на
Compatibility
tab - Регистрация
Override high DPI scaling behavior.
- выбрать
System
наScaling performed by:
решение: запустите его на JRE 9.
Это потому, что среда выполнения Java объявила себя "дюйм", но не поддержали его на AWT и Swing. Java-приложения были размера и визуализации на основе пикселей, а не должным образом масштабируются, это включало HiDPI дисплеев. В любом случае, это недавно было решено. Смотрите выпуск JEP 263: HiDPI графика на Windows и Linux а то обновление.
таким образом, увеличение размера шрифта не работа (потому что это не увеличивает остальное); аргумент jvm -Dsun.java2d.dpiaware=false
не работает (потому что это на самом деле не поддерживается); и файл манифеста + редактирование реестра (для Windows) просто не работает.
затем вам нужно запустить его на JRE 9, потому что он действительно поддерживает эту функцию.
если вы наткнулись на этот вопрос, но на самом деле ищу решение, которое работает на Linux, это для вас.
если вы можете добавить параметры в java
двоичный файл, который запускает приложение, вы можете использовать опцию -D
передать значение sun.java2d.uiScale
proprty для указания коэффициента масштабирования для Java2D. Это приведет к масштабированию приложения. Значение коэффициента масштабирования-double. Убедитесь, что вы передаете этот параметр java
сам двоичный файл, а не запущенная Java приложение.
Пример: Запуск NearInfinity.jar с коэффициентом масштабирования пользовательского интерфейса 2.5
java -Dsun.java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar
я нашел эту статью весьма полезной в целом для запуска Linux на системах HiDPI, и некоторые вещи могут работать и на Windows:https://wiki.archlinux.org/index.php/HiDPI
необходимо установить PreferExternalManifest в regedit и создать пользовательские манифесты для java.exe и javaw.exe, как указано в следующем ответе stackoverflow https://stackoverflow.com/a/39372897
чтобы заставить все исполняемые файлы java иметь "свойства > совместимость > режим масштабирования dpi "значение " система", в powershell администратора (win-x, a), выполните:
$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}
чтобы отменить:
$javaexes | foreach {REG delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /f}
вместо HKCU вы могли бы использовать HKLM, но тогда вы не можете изменить параметр масштабирования dpi вручную больше в диалоговом окне Свойства > совместимость java*.файл EXE.
Спасибо за Кеннета. Я нахожу C:\Program Files (x86)\Java\jre\bin\java.exe
затем right click -> properties -> compatibility tab -> "override high DPI scaling behavior"
и выберите System
, то он работает.Я также попытался таким же образом изменить javaw.exe
совместимость, он также работает.
PS: я запускаю burpsuite.jar
на win10 1703 с помощью этого метода.
решение Elderry хорошо, но что, если вы хотите запустить файл jar в Windows, и у него нет параметров совместимости?
перейти C:\Program Files (x86)\Java\jre\bin и найдите javaw.исполняемый. Щелкните правой кнопкой мыши, свойства, вкладка совместимость, проверьте "переопределить поведение масштабирования с высоким разрешением" и выберите " Система "(обратите внимание, что" system enhanced " не работает для меня).
теперь jar-файл Windows должна корректно с читаемым текстом. Если нет, это может означать, что Windows не связывает jar введите файлы в javaw.Ева, как следует. Третье исправление лица доступно на: https://johann.loefflmann.net/en/software/jarfix/index.html
Попробуйте Java 10.
Я нашел это-Dsun.java2d.dpiaware=false не работает в Java 9 или 10. Также для Java 8 и 9 мое приложение swing мало, но Java 10 размеров правильно в windows!
Так для приложения, которое вы можете запустить из файла bat, как: java-jar xxx.jar
Я только что добавил JAVA_HOME=....\java_10 и Path=%переменной JAVA_HOME%\bin в;%путь% в bat-файл.
java-jar xxx.jar
я смог получить разумный dpi при запуске с помощью командной строки, например:
%SystemRoot%\system32\cmd.exe /C C:\your.file.path\yourJarFile.jar
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]