Saya mencoba menjalankan aplikasi Java (file JAR) pada layar DPI tinggi pada Windows 10. Aplikasi ini menggunakan Swing dan karenanya tidak menyadari DPI. Biasanya ketika saya menjalankan aplikasi yang tidak menyadari DPI, Windows akan mengatur skala untuk saya, meskipun buram. Tetapi untuk beberapa alasan itu tidak meningkatkan aplikasi Java; Saya hanya mendapatkan jendela kecil di sudut dengan teks yang mustahil dibaca. Bagaimana cara menjalankan aplikasi Java dengan penskalaan DPI tinggi (kabur) Windows?
windows-10
java
high-dpi
Jeff E
sumber
sumber
Jawaban:
Masalahnya di sini tampaknya adalah bahwa Swing secara default mengklaim bahwa DPI sadar, jadi windows tidak skala itu. Gunakan sakelar ini untuk mematikan perilaku ini dan windows akan mulai menskala aplikasi ayun Anda:
[EDIT: Sayangnya, flag ini sepertinya tidak lagi berfungsi di Java 8, saya sedang mengujinya di Java 6. Sepertinya ini adalah masalah yang diketahui .]
[EDIT 2: Anda dapat memodifikasi instalasi Java 8 agar berfungsi dengan benar, menggunakan program untuk memodifikasi manifes EXE. Saya mengubah pengaturan dari true ke false dalam manifes di dalam java.exe dan javaw.exe, dan sekarang program Swing saya berskala dengan benar pada Windows 10 dpi tinggi. Saya menggunakan Resource Tuner untuk ini.]
[Sunting 3] Cukup gunakan Java 9
sumber
false
, tetapi aplikasi (JNLP / WebStart) tidak skala dengan baik. Bisakah Anda memikirkan cara sederhana untuk melakukan pengecekan silang apakah ini berfungsi atau tidak, mis. Aplikasi uji yang Anda tahu yang merespons pengaturan ini?Baru saja menemukan solusi mudah di mesin Windows 10 saya:
java.exe
Anda terinstal.Properties
Compatibility
tabOverride high DPI scaling behavior.
System
untukScaling performed by:
sumber
java -jar myJarFile.jar
dan melakukan langkah 2 hingga 5 pada pintasan itu (Windows 10, Java 8).javaw.exe
Jika Anda menemukan pertanyaan ini tetapi sebenarnya mencari solusi yang berfungsi di Linux, ini untuk Anda.
Jika Anda bisa menambahkan parameter ke
java
biner yang meluncurkan aplikasi, Anda bisa menggunakan opsi-D
untuk memberikan nilai untuksun.java2d.uiScale
proprty untuk menentukan faktor penskalaan untuk Java2D. Ini akan mengukur aplikasi Anda. Nilai faktor penskalaan adalah ganda. Pastikan Anda meneruskan opsi ini kejava
biner itu sendiri, bukan aplikasi Java yang diluncurkan.Contoh: Luncurkan NearInfinity.jar dengan faktor penskalaan UI 2,5
Saya menemukan artikel ini cukup berguna secara umum untuk menjalankan Linux pada sistem HiDPI, dan beberapa hal juga dapat bekerja pada Windows: https://wiki.archlinux.org/index.php/HiDPI
sumber
Solusi: Jalankan di JRE 9.
Ini karena Java runtime menyatakan dirinya "DPI-aware" tetapi tidak benar-benar mendukungnya untuk AWT dan Swing. Aplikasi Java berukuran dan dirender berdasarkan piksel alih-alih diskalakan dengan benar, ini termasuk tampilan HiDPI. Bagaimanapun, ini telah diselesaikan baru-baru ini. Lihat masalah JEP 263: Grafik HiDPI pada Windows dan Linux dan peningkatannya .
Jadi, meningkatkan ukuran font tidak berfungsi (karena tidak meningkatkan sisanya); argumen jvm
-Dsun.java2d.dpiaware=false
tidak berfungsi (karena tidak benar-benar didukung); dan file manifest + edit registry (untuk Windows) tidak berfungsi.Kemudian, Anda perlu menjalankannya di JRE 9 karena sangat mendukung fitur ini.
sumber
Untuk memaksa semua executable java untuk memiliki "properties> kompatibilitas> mode penskalaan dpi" set ke "System", di administrator powershell (win-x, a), jalankan:
untuk membatalkan:
Alih-alih HKCU Anda bisa menggunakan HKLM, tetapi kemudian Anda tidak dapat mengubah pengaturan penskalaan dpi secara manual lagi di dialog properties> kompatibilitas file java * .exe.
sumber
Anda perlu mengatur PreferExternalManifest di regedit dan membuat manifes khusus untuk java.exe dan javaw.exe seperti yang diberikan dalam jawaban stackoverflow berikut https://stackoverflow.com/a/39372897
sumber
Solusi Elderry baik, tetapi bagaimana jika Anda ingin menjalankan file jar pada Windows dan tidak memiliki opsi kompatibilitas?
Pergi ke C: \ Program Files (x86) \ Java \ jre \ bin dan temukan javaw.exe. Klik kanan, properti, tab kompatibilitas, centang "timpa perilaku penskalaan DPI tinggi" dan pilih "Sistem" (Perhatikan bahwa "Peningkatan sistem" tidak berfungsi untuk saya).
Sekarang file jar windows harus skala dengan teks yang dapat dibaca. Jika tidak, itu mungkin berarti bahwa Windows tidak menautkan file jenis jar ke javaw. Seperti yang seharusnya. Perbaikan pihak ketiga tersedia di: https://johann.loefflmann.net/en/software/jarfix/index.html
sumber
Coba Java 10.
Saya menemukan bahwa -Dsun.java2d.dpiaware = false tidak berfungsi di Java 9 atau 10. Juga untuk Java 8 dan 9 aplikasi swing saya kecil, tetapi ukuran Java 10 di windows!
jadi untuk aplikasi yang bisa Anda jalankan dari file bat seperti: java -jar xxx.jar
Saya baru saja menambahkan JAVA_HOME = .... \ java_10 dan PATH =% JAVA_HOME% \ bin;% PATH% dalam file bat.
java -jar xxx.jar
sumber
Saya mencoba sebagian besar solusi ini, tetapi yang bekerja untuk saya adalah mengatur mode kompatibilitas sistem pada file yang saya temukan di lokasi berikut:
sumber
java.exe
dan /javaw.exe
atau menggunakan rekomendasi lainnya. Thejavapath
folder berisi link ke executable Java terbaru diinstal pada sistem. Dengan demikian menerapkan pengaturan diProgram Files
harus cukup.Saya bisa mendapatkan dpi yang masuk akal ketika berlari menggunakan command prompt seperti:
sumber
java.exe
ataujavaw.exe
.