Windows 10で高DPIディスプレイ上でJavaアプリ(JARファイル)を実行しようとしています。このアプリはSwingを使用しているため、DPIに対応していません。通常、DPIに対応していないアプリケーションを実行すると、Windowsはぼやけながらもスケーリングしてくれます。しかし、なぜかJavaアプリのスケーリングをしてくれません。Windowsの高DPI(ぼやけた)スケーリングでJavaアプリを実行するにはどうすればいいのでしょうか?
93 Jeff 2015-10-18
ここでの問題は、SwingはデフォルトでDPIを認識していると主張しているようで、windowsはそれをスケーリングしません。このスイッチを使ってこの動作をオフにすると、windowsがSwingアプリのスケーリングを開始します
-Dsun.java2d.dpiaware=false
[EDIT: 残念ながら、このフラグはもはやJava 8では動作しないようです、私はJava 6でそれをテストしていました。これは既知の問題のようです。]
[EDIT 2: EXE マニフェストを修正するプログラムを使用して、Java 8 のインストールを修正して正常に動作するようにすることができます。java.exeとjavaw.exeのマニフェスト内の設定をtrueからfalseに変更したところ、Windows 10の高解像度でSwingプログラムが正しくスケールするようになりました。これにはResource Tunerを使用しました。]
編集3】Java9を使えばいいんだよ
41 CarlG 2015-12-01
ちょうど私のWindows 10マシンで簡単な解決策を見つけました
- インストールした
java.exe
を探す - 右クリック→
Properties
Compatibility
タブに移動Override high DPI scaling behavior.
をチェックSystem
をScaling performed by:
に選択します
90 Elderry 2017-05-10
この質問に行き当たりましたが、実際にLinuxで動作するソリューションを探している場合、これはあなたのためのものです
アプリケーションを起動するjava
バイナリにパラメータを追加できるのであれば、-D
オプションでsun.java2d.uiScale
プロパティーに値を渡してJava2Dのスケーリング係数を指定することができます。これでアプリケーションがスケーリングされます。スケーリング・ファクタの値は2倍です。起動したJavaアプリケーションではなく、java
バイナリ自体にこのオプションを渡すようにしてください
例。NearInfinity.jarをUIのスケーリングファクターを2.5にして起動します
java -Dsun.java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar
あるいは、環境変数 GDK_SCALE
を設定することもできます。例を示します
GDK_SCALE=2 java -jar ~/jars/NearInfinity.jar
この ArchLinux Wiki の記事は HiDPI システム上で Linux を動作させるための一般的な方法として非常に有用であり、いくつかのものは Windows でも動作するかもしれません
27 Christian Hujer 2017-04-02
解決方法。JRE 9で実行してください
これは、Javaランタイムが「DPI対応」を宣言していたにもかかわらず、AWTやSwingでは実際にはサポートしていなかったからです。Javaアプリケーションは、適切にスケーリングされるのではなく、ピクセルに基づいてサイズを調整してレンダリングされていましたが、これにはHiDPIディスプレイも含まれていました。とにかく、これは最近解決されました。JEP 263: HiDPI Graphics on Windows and Linux と アップグレード を参照してください
そのため、フォントサイズを大きくしてもうまくいかない(他のものが増えないから)、jvmの引数-Dsun.java2d.dpiaware=false
がうまくいかない(実際にはサポートされていないから)、マニフェストファイル+レジストリ編集(Windows用)がうまくいかない、ということになります
それから、この機能は本当にサポートされているので、JRE 9で実行する必要があります
11 Sergio Muriel 2017-08-01
すべてのjava実行ファイルに「properties > compatibility > dpi scaling mode」を「System」に強制的に設定するには、管理者用パワーシェル(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}
to undo:
$javaexes | foreach {REG delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /f}
HKCUの代わりにHKLMを使用することもできますが、この場合、java*.exeファイルのプロパティ>互換性ダイアログでdpi-スケーリング設定を手動で変更することはできなくなります
5 masterxilo 2017-12-13
regeditでPreferExternalManifestを設定し、以下の stackoverflowの回答で与えられたようにjava.exeとjavaw.exe用のカスタムマニフェストを作成する必要があります https://stackoverflow.com/a/39372897
2 droidlabel 2017-01-08
Elderryさんの解決策は良いのですが、Windows上でjarファイルを実行したい場合、互換性のオプションがない場合はどうしたら良いのでしょうか?
C:C:Program Files (x86)の「Java\\jrebin」で、javaw.exeを探して、右クリック。右クリック、プロパティ、互換性タブで、「高DPIスケーリング動作のオーバーライド」にチェックを入れて、「システム」を選択してください(私の場合、「システム拡張」はうまくいきませんでした)
これで jar ファイルのウィンドウは読みやすいテキストで適切に拡大縮小されるようになりました。もしそうでない場合は、Windows が jar タイプのファイルを javaw.ve にリンクしていないことを意味しているかもしれません。サードパーティ製の修正プログラムがあります。https://johann.loefflmann.net/en/software/jarfix/index.html
0 Kenneth 2018-02-04
Java 10を試してみてください
私は、-Dsun.java2d.dpiaware=falseがJava 9や10では動作しないことを発見しました。また、Java 8と9ではスイングアプリは小さいのですが、Java 10ではwindowsではちゃんとサイズが合っています
そのため、以下のようにバットファイルから実行できるアプリの場合は、java -jar xxx.jarを使用します
先ほどバットファイルにJAVA_HOME=….\0java_10とPATH=%JAVA_HOME%\bin;%PATH%を追加しました
java -jar xxx.jar
0 Stan Towianski 2018-07-07
これらの解決策のほとんどを試してみましたが、私に効果があったのは、以下の場所にあるファイルにシステム互換モードを設定することでした
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
-2 Ryan Reynolds 2018-11-30
コマンドプロンプトを使って実行すると、感覚的なdpiを得ることができました
%SystemRoot%\system32\cmd.exe /C C:\your.file.path\yourJarFile.jar
-4 user3301455 2016-08-03