Я пытаюсь запустить приложение Java (файл JAR) на дисплее с высоким DPI в Windows 10. Приложение использует Swing и, следовательно, не поддерживает DPI. Обычно, когда я запускаю приложение, которое не поддерживает DPI, Windows масштабирует его для меня, хотя и размыто. Но по какой-то причине это не масштабирует приложение Java; Я просто получаю маленькое окошко в углу с невозможным для чтения текстом. Как запустить приложение Java с масштабированием Windows с высоким разрешением (размытое)?
windows-10
java
high-dpi
Джефф Э
источник
источник
Ответы:
Проблема здесь заключается в том, что Swing по умолчанию утверждает, что поддерживает DPI, поэтому Windows не масштабирует его. Используйте этот переключатель, чтобы отключить это поведение, и Windows начнет масштабировать ваше приложение Swing:
[ПРАВКА: К сожалению, этот флаг больше не работает в Java 8, я тестировал его в Java 6. Похоже, это известная проблема .]
[РЕДАКТИРОВАТЬ 2: Вы можете изменить установку Java 8 для правильной работы, используя программу для изменения манифестов EXE. Я изменил настройку с true на false в манифестах внутри java.exe и javaw.exe, и теперь мои программы Swing корректно масштабируются в Windows 10 с высоким разрешением. Я использовал Resource Tuner для этого.]
[Править 3] Просто используйте Java 9
источник
false
, но приложение (JNLP / WebStart) не масштабировалось должным образом в любом случае. Можете ли вы придумать простой способ перепроверить, работает ли это или нет, например, известное вам тестовое приложение, которое реагирует на этот параметр?Просто нашел простое решение на моем компьютере с Windows 10:
java.exe
вас установлено.Properties
Compatibility
вкладкуOverride high DPI scaling behavior.
System
дляScaling performed by:
источник
java -jar myJarFile.jar
и выполнил шаги с 2 по 5 для этого ярлыка (Windows 10, Java 8).javaw.exe
Если вы наткнулись на этот вопрос, но на самом деле ищете решение, которое работает на Linux, это для вас.
Если вы можете добавить параметры в
java
двоичный файл, который запускает приложение, вы можете использовать опцию-D
для передачи значения дляsun.java2d.uiScale
свойства, чтобы указать коэффициент масштабирования для Java2D. Это будет масштабировать ваше приложение. Значение коэффициента масштабирования является двойным. Убедитесь, что вы передаете эту опцию самомуjava
двоичному файлу, а не запущенному приложению Java.Пример: Запустите NearInfinity.jar с коэффициентом масштабирования пользовательского интерфейса 2,5
Я нашел эту статью довольно полезной в целом для запуска 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) выполните:
отменить:
Вместо 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, используя этот метод.источник
Решение Elderry хорошо, но что, если вы хотите запустить jar-файл в Windows, и у него нет параметров совместимости?
Перейдите в C: \ Program Files (x86) \ Java \ jre \ bin и найдите javaw.exe. Щелкните правой кнопкой мыши, выберите свойства, вкладку совместимости, установите флажок «переопределить поведение масштабирования с высоким DPI» и выберите «Система» (обратите внимание, что «Улучшенная система» не работает для меня)
Теперь окна файлов jar должны правильно масштабироваться с читаемым текстом. В противном случае это может означать, что Windows не связывает файлы типа jar с javaw.eve, как это должно быть. Исправление третьей стороны доступно по адресу: 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;% PATH% в файле bat.
java -jar xxx.jar
источник
Я попробовал большинство из этих решений, но для меня работало то, что я установил режим совместимости системы для файлов, которые я нашел в следующем месте:
источник
Я смог получить ощутимое значение точек на дюйм при запуске с помощью командной строки, например:
источник