Как запустить приложения Java, масштабированные на дисплее с высоким разрешением?
Я пытаюсь запустить приложение Java (файл JAR) на дисплее с высоким DPI в Windows 10. Приложение использует Swing и, следовательно, не поддерживает DPI. Обычно, когда я запускаю приложение, которое не поддерживает DPI, Windows масштабирует его для меня, хотя и размыто. Но по какой-то причине это не масштабирует приложение Java; Я просто получаю маленькое окошко в углу с невозможным для чтения текстом. Как запустить приложение Java с масштабированием Windows с высоким разрешением (размытое)?
12 ответов
Проблема здесь заключается в том, что Swing по умолчанию утверждает, что поддерживает DPI, поэтому Windows не масштабирует его. Используйте этот переключатель, чтобы отключить это поведение, и Windows начнет масштабировать ваше приложение Swing:
-Dsun.java2d.dpiaware=false
[ПРАВКА: К сожалению, этот флаг больше не работает в Java 8, я тестировал его в Java 6. Похоже, это известная проблема.]
[РЕДАКТИРОВАТЬ 2: Вы можете изменить установку Java 8 для правильной работы, используя программу для изменения манифестов EXE. Я изменил настройку с true на false в манифестах внутри java.exe и javaw.exe, и теперь мои программы Swing корректно масштабируются в Windows 10 с высоким разрешением. Я использовал Resource Tuner для этого.]
[Править 3] Просто используйте Java 9
Просто нашел простое решение на моем компьютере с Windows 10:
- найти
java.exe
Вы установили. - Правый клик ->
Properties
- Идти к
Compatibility
табуляция - Проверьте
Override high DPI scaling behavior.
- выберите
System
заScaling performed by:
Если вы наткнулись на этот вопрос, но на самом деле ищете решение, которое работает на Linux, это для вас.
Если вы можете добавить параметры в java
двоичный файл, который запускает приложение, вы можете использовать опцию -D
передать значение для sun.java2d.uiScale
Рекомендуется указать коэффициент масштабирования для Java2D. Это будет масштабировать ваше приложение. Значение коэффициента масштабирования является двойным. Убедитесь, что вы передаете эту опцию 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
Решение: Запустите его на JRE 9.
Это связано с тем, что среда выполнения Java объявила себя "DPI-осведомленной", но на самом деле не поддерживала ее для AWT и Swing. Java-приложения были измерены и отображены на основе пикселей, а не должным образом масштабированы, включая дисплеи HiDPI. В любом случае, это было недавно решено. См. Выпуск JEP 263. Графика HiDPI в Windows и Linux и обновление.
Таким образом, увеличение размера шрифта не работает (потому что это не увеличивает все остальное); аргумент JVM -Dsun.java2d.dpiaware=false
не работает (потому что это не очень поддерживается); и файл манифеста + редактирование реестра (для Windows) просто не работает.
Затем вам нужно запустить его на JRE 9, потому что он действительно поддерживает эту функцию.
Чтобы заставить все исполняемые файлы 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-scaling в диалоге свойств> совместимости файлов java*.exe.
Вам необходимо установить PreferExternalManifest в regedit и создать собственные манифесты для java.exe и javaw.exe, как указано в следующем ответе stackoverflow https://stackoverflow.com/a/39372897
Спасибо за Кеннета. я нахожу 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, используя этот метод.
Попробуйте 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;%PATH% в файле bat.
java -jar xxx.jar
Решение Elderry хорошо, но что, если вы хотите запустить jar-файл в Windows, и у него нет параметров совместимости?
Перейдите в C:\Program Files (x86)\Java\jre\bin и найдите javaw.exe. Щелкните правой кнопкой мыши, выберите свойства, вкладку совместимости, установите флажок "Переопределить поведение масштабирования с высоким разрешением" и выберите "Система" (обратите внимание, что "Улучшенная система" не работает для меня).
Теперь окна файлов jar должны правильно масштабироваться с читаемым текстом. В противном случае это может означать, что Windows не связывает файлы типа jar с javaw.eve, как это должно быть. Исправление третьей стороны доступно по адресу: https://johann.loefflmann.net/en/software/jarfix/index.html
Еще одна возможность в Linux, хотя и с более радикальным изменением пользовательского интерфейса: принудительное использование GTK и системных шрифтов.
export _JAVA_OPTIONS="-Dswing.systemlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.aatext=true -Dawt.useSystemAAFontSettings=on $_JAVA_OPTIONS"
Его также можно применить к одному приложению:
_JAVA_OPTIONS="-Dswing.systemlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.aatext=true -Dawt.useSystemAAFontSettings=on $_JAVA_OPTIONS" visualvm_216/bin/visualvm
Источник: https://bbs.archlinux.org/viewtopic.php?id=185503#p1445438 .
Я попробовал большинство из этих решений, но для меня работало то, что я установил режим совместимости системы для файлов, которые я нашел в следующем месте:
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
Я смог получить ощутимое значение точек на дюйм при запуске с помощью командной строки, например:
%SystemRoot%\system32\cmd.exe /C C:\your.file.path\yourJarFile.jar