2015-10-18 16:43:09 +0000 2015-10-18 16:43:09 +0000
81
81

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

Windows 10で高DPIディスプレイ上でJavaアプリ(JARファイル)を実行しようとしています。このアプリはSwingを使用しているため、DPIに対応していません。通常、DPIに対応していないアプリケーションを実行すると、Windowsはぼやけながらもスケーリングしてくれます。しかし、なぜかJavaアプリのスケーリングをしてくれません。Windowsの高DPI(ぼやけた)スケーリングでJavaアプリを実行するにはどうすればいいのでしょうか?

回答 (10)

77
77
77
2017-05-10 18:10:25 +0000

ちょうど私のWindows 10マシンで簡単な解決策を見つけました。

1.インストールしたjava.exeを探す。 2. 右クリック -> Properties 3. Compatibility タブ 4. チェック Override high DPI scaling behavior. 5. SystemのためにScaling performed by:を選択する。

38
38
38
2015-12-01 18:31:58 +0000

ここでの問題は、SwingはデフォルトでDPIを認識していると主張しているようで、windowsはそれをスケーリングしません。このスイッチを使ってこの動作をオフにすると、windowsはSwingアプリのスケーリングを開始します。

-Dsun.java2d.dpiaware=false

[ EDIT: 残念ながら、このフラグはJava 8では動作しないようです。これは既知の問題のようです。] [ EDIT 2: EXEマニフェストを修正するプログラムを使用して、正しく動作するようにJava 8のインストールを修正することができます。java.exeとjavaw.exeのマニフェスト内の設定をtrueからfalseに変更したところ、Windows 10の高解像度でSwingプログラムが正しくスケールするようになりました。これにはResource Tunerを使いました。]

[編集3] Java 9を使えばいいんだよ。

15
15
15
2017-04-02 09:11:49 +0000

もしあなたがこの質問に躓いたが、実際にLinuxで動作するソリューションを探しているのであれば、これはあなたのためのものです。

アプリケーションを起動するjava バイナリにパラメータを追加できる場合、オプション-D プロプリティに値を渡してJava2Dのスケーリング係数を指定することができます。これにより、アプリケーションのスケーリングが行われます。スケーリングファクタの値は2倍です。このオプションは、起動したJavaアプリケーションではなく、sun.java2d.uiScaleバイナリ自体に渡すようにしてください。

例。

java -Dsun.java2d.uiScale=2.5 -jar ~/jars/NearInfinity.jar

この記事は、HiDPIシステム上でLinuxを実行する際に一般的に非常に有用だと思いました。 https://wiki.archlinux.org/index.php/HiDPI

11
11
11
2017-08-01 00:05:58 +0000

解決方法。JRE 9で実行してみてください。

これは、Javaランタイムが “DPI対応 "を宣言したものの、AWTやSwingではサポートしていなかったためです。Javaアプリケーションは適切にスケーリングされるのではなく、ピクセルに基づいてサイズを決めてレンダリングされていました。いずれにしても、これは最近解決されました。問題 JEP 263: HiDPI Graphics on Windows and Linux アップグレード を参照してください。

ですから、フォントサイズを大きくしてもうまくいきません(他のものを大きくしないからです)。jvmの引数-Dsun.java2d.dpiaware=falseもうまくいきません(実際にはサポートされていないからです)。

それから、JRE 9 は本当にこの機能をサポートしているので、JRE 9 で実行する必要があります。

4
4
4
2017-12-13 12:08:20 +0000

すべての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}

to undo:

0x1&

HKCUの代わりに、HKLMを使用することができますが、その後、java*.exeファイルのproperties > compatibilityダイアログで、もう手動でdpi-scaling設定を変更することはできません。

2
2
2
2017-01-08 17:29:02 +0000

regeditでPreferExternalManifestを設定し、以下のstackoverflow answe https://stackoverflow.com/a/39372897 にあるように、java.exeとjavaw.exe用のカスタムマニフェストを作成する必要があります。

0
0
0
2018-07-07 21:40:12 +0000

Java10を試してみます。

-Dsun.java2d.dpiaware=falseがJava9や10では動作しないことがわかりました。また、私のスイングアプリはJava8と9では小さいのですが、Java10ではwindowsではちゃんとサイズが出ます。

だから、バットファイルから実行できるアプリの場合は、java -jar xxx.jar

バットファイルにJAVA_HOME=…._java10とPATH=%JAVAHOME%bin;%PATH%を追加しました。

java -jar xxx.jar

0
0
0
2018-02-04 04:21:52 +0000

Elderryさんの解決策はいいんだけど、Windowsでjarファイルを実行したい時に互換性のオプションがない場合はどうすればいいんだろう?

C:Grogram Files (x86)に移動して、javaw.exeを探す。右クリック、プロパティ、互換性タブで、「高DPIスケーリング動作を上書きする」にチェックを入れて、「システム」を選択してください(私の場合は「システム拡張」では動作しませんでした)。

これでjarファイルのウィンドウは、読めるテキストで適切にスケーリングされるはずです。もしそうでない場合は、Windows が jar タイプのファイルを javaw.ve にリンクしていないことを意味しているかもしれません。サードパーティ製の修正プログラムがあります。 https://johann.loefflmann.net/en/software/jarfix/index.html で公開されています。

-2
-2
-2
2018-11-30 15:06:18 +0000

これらの解決策のほとんどを試してみましたが、うまくいったのは、以下の場所にあるファイルにシステム互換モードを設定することでした。

C:\Program Files (x86)\Common Files\Oracle\Java\javapath
-4
-4
-4
2016-08-03 22:14:50 +0000

コマンドプロンプトを使って実行すると、正常なdpiを得ることができました。

%SystemRoot%\system32\cmd.exe /C C:\your.file.path\yourJarFile.jar

関連する質問

15
8
14
9
7