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

Come posso eseguire le applicazioni Java in upscaling su un display ad alta risoluzione?

Sto cercando di eseguire un'applicazione Java (file JAR) su un display ad alto DPI su Windows 10. L'applicazione usa Swing e quindi non è DPI-aware. Normalmente quando eseguo un'applicazione che non è DPI-aware, Windows la ridimensiona per me, anche se sfocata. Ma per qualche motivo non scala l'applicazione Java; ottengo solo una piccola finestra nell'angolo con un testo impossibile da leggere. Come posso eseguire un'applicazione Java con il ridimensionamento di Windows ad alto DPI (sfocato)?

Risposte (10)

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

Ho appena trovato una soluzione facile sulla mia macchina Windows 10:

  1. Trova java.exe che hai installato.
  2. Fai clic con il tasto destro del mouse su -> Properties
  3. Vai alla scheda Compatibility
  4. Check Override high DPI scaling behavior.
  5. Scegli System per Scaling performed by:
38
38
38
2015-12-01 18:31:58 +0000

Il problema qui sembra essere che Swing sostiene per default di essere consapevole dei DPI, quindi windows non lo scala. Usa questo interruttore per disattivare questo comportamento e windows inizierà a scalare la tua app swing:

-Dsun.java2d.dpiaware=false

[ EDIT: Sfortunatamente, questa bandiera non sembra più funzionare in Java 8, la stavo testando in Java 6. Sembra che questo sia un problema noto ]. [ EDIT 2: È possibile modificare un'installazione di Java 8 per farla funzionare correttamente, usando un programma per modificare i manifesti EXE. Ho cambiato l'impostazione da true a false nei manifesti all'interno di java.exe e javaw.exe, e ora i miei programmi Swing scalano correttamente in Windows 10 high dpi. Ho usato Resource Tuner per questo].

[Modifica 3] Basta usare Java 9

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

Se vi siete imbattuti in questa domanda ma state effettivamente cercando una soluzione che funzioni su Linux, questo è per voi.

Se puoi aggiungere parametri al binario java che lancia l'applicazione, puoi usare l'opzione -D per passare un valore per la proprità sun.java2d.uiScale per specificare un fattore di scala per Java2D. Questo ridimensionerà la vostra applicazione. Il valore del fattore di scala è un doppio. Assicurati di passare questa opzione al binario java stesso, non all'applicazione Java lanciata.

Esempio: Lancia NearInfinity.jar con un fattore di scala UI di 2.5

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

Ho trovato questo articolo abbastanza utile in generale per far funzionare Linux su sistemi HiDPI, e alcune delle cose potrebbero funzionare anche su Windows: https://wiki.archlinux.org/index.php/HiDPI

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

Soluzione: Eseguirlo su JRE 9.

Questo perché il runtime Java si dichiarava “DPI-aware” ma non lo supportava veramente per AWT e Swing. Le applicazioni Java erano dimensionate e renderizzate in base ai pixel piuttosto che essere correttamente scalate, questo includeva i display HiDPI. Comunque, questo è stato recentemente risolto. Vedi il problema JEP 263: HiDPI Graphics on Windows and Linux e l’ aggiornamento .

Quindi, aumentare la dimensione del carattere non funziona (perché non aumenta il resto delle cose); l'argomento jvm -Dsun.java2d.dpiaware=false non funziona (perché non è realmente supportato); e il file manifest + modifica del registro (per Windows) semplicemente non funziona.

Allora, è necessario eseguirlo su JRE 9 perché supporta davvero questa caratteristica.

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

Per forzare tutti gli eseguibili java ad avere “proprietà > compatibilità > modalità di scalatura dpi” impostata su “Sistema”, in una powershell di amministratore (win-x, a), eseguire:

$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}

per annullare:

$javaexes | foreach {REG delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /V $_ /f}

Invece di HKCU potreste usare HKLM, ma poi non potrete più cambiare manualmente l'impostazione del dpi-scaling nella finestra di dialogo delle proprietà > compatibilità dei file java*.exe.

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

È necessario impostare PreferExternalManifest in regedit e creare manifesti personalizzati per java.exe e javaw.exe come indicato nella seguente risposta di stackoverflow https://stackoverflow.com/a/39372897

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

Prova Java 10.

Ho trovato che -Dsun.java2d.dpiaware=false non funziona in Java 9 o 10. Anche per Java 8 e 9 la mia app swing è piccola, ma Java 10 si dimensiona correttamente in windows!

quindi per un'app che si può eseguire da un file bat come: java -jar xxx.jar

ho appena aggiunto JAVA_HOME=….\java\10 e PATH=%JAVA_HOME%\bin;%PATH% nel file bat.

java -jar xxx.jar

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

La soluzione di Elderry è buona, ma cosa succede se vuoi eseguire un file jar su Windows e non ha opzioni di compatibilità?

Vai a C:\Program Files (x86)\Java\jre\bin e trova javaw.exe. Fai clic destro, proprietà, scheda compatibilità, spunta “sovrascrivi il comportamento di scalatura dei DPI alti” e seleziona “Sistema” (nota che “Sistema migliorato” non ha funzionato per me).

Ora le finestre del file jar dovrebbero scalare correttamente con testo leggibile. Se non è così, potrebbe significare che Windows non collega i file di tipo jar a javaw.eve come dovrebbe. Una correzione di terze parti è disponibile presso: https://johann.loefflmann.net/en/software/jarfix/index.html

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

Ho provato la maggior parte di queste soluzioni, ma quella che ha funzionato per me è stata l'impostazione della modalità di compatibilità del sistema sui file che ho trovato nella seguente posizione:

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

Sono stato in grado di ottenere dpi ragionevoli quando è stato eseguito utilizzando il prompt dei comandi come:

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