windows 10 – 高DPIディスプレイでJavaアプリをアップスケールして実行するには?

high-dpi java windows-10

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マシンで簡単な解決策を見つけました

  1. インストールしたjava.exeを探す
  2. 右クリック→Properties
  3. Compatibilityタブに移動
  4. Override high DPI scaling behavior.をチェック
  5. SystemScaling 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


タイトルとURLをコピーしました