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

Como posso executar aplicações Java com escala superior num ecrã de altoDPI?

Advertisement

Estou a tentar executar uma aplicação Java (ficheiro JAR) num ecrã de altoDPI no Windows 10. A aplicação usa Swing e, portanto, não é sensível ao DPI. Normalmente quando executo uma aplicação que não é sensível a DPI, o Windows irá escalá-la para mim, embora desfocada. Mas por alguma razão não está a escalar a aplicação Java; eu só tenho uma pequena janela no canto com texto impossível de ler. Como é que corro uma aplicação Java com o escalonamento do Windows (desfocado)?

Advertisement

Respostas (10)

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

Acabei de encontrar uma solução fácil na minha máquina Windows 10:

  1. encontrar java.exe você instalou.
  2. Clique direito -> Properties
  3. Ir para Compatibility separador
  4. Check Override high DPI scaling behavior.
  5. Escolher System para Scaling performed by:&.
38
38
38
2015-12-01 18:31:58 +0000

O problema aqui parece ser que o Swing está por defeito a afirmar que está ciente do DPI, por isso as janelas não o escalam. Use este interruptor para desligar este comportamento e as janelas começarão a escalar a sua aplicação de Swing:

-Dsun.java2d.dpiaware=false

[ EDIT: Infelizmente, esta bandeira já não parece funcionar em Java 8, eu estava a testá-la em Java 6. Parece que este é um número conhecido.] [ EDIT 2: É possível modificar uma instalação Java 8 para funcionar correctamente, usando um programa para modificar os manifestos EXE. Mudei a configuração de verdadeiro para falso nos manifestos dentro do java.exe e javaw.exe, e agora os meus programas Swing escalam correctamente no Windows 10 dpi de altura. Utilizei Resource Tuner para isto].

[Editar 3] Basta usar Java 9

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

Se tropeçou nesta questão mas está realmente à procura de uma solução que funcione no Linux, isto é para si.

Se puder adicionar parâmetros ao java binário que lança a aplicação, pode usar a opção -D para passar um valor para o sun.java2d.uiScale proprty para especificar um factor de escala para Java2D. Isto irá escalar a sua aplicação. O valor do factor de escala é um duplo. Certifique-se de que passa esta opção para o próprio java binário, e não para a aplicação Java lançada.

Exemplo: Lançamento NearInfinity.jar com um factor de escala UI de 2,5

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

Achei este artigo bastante útil em geral para correr Linux em sistemas HiDPI, e algumas das coisas podem funcionar também em Windows: https://wiki.archlinux.org/index.php/HiDPI

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

Solução: Executá-lo no JRE 9.

Isto é porque o runtime Java declarou-se “consciente do DPI” mas não o suportou realmente para AWT e Swing. As aplicações Java foram dimensionadas e renderizadas com base em pixels em vez de serem devidamente dimensionadas, isto incluiu ecrãs HiDPI. De qualquer modo, isto foi recentemente resolvido. Ver a questão JEP 263: HiDPI Graphics on Windows e Linux e a actualização .

Então, aumentar o tamanho da fonte não funciona (porque não aumenta o resto das coisas); o argumento jvm -Dsun.java2d.dpiaware=false não funciona (porque não é realmente suportado); e o ficheiro manifesto + edição de registo (para Windows) simplesmente não funciona.

Então, é necessário executá-lo no JRE 9 porque suporta realmente esta funcionalidade.

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

Para forçar todos os executáveis java a terem “propriedades {\i}> compatibilidade {\i}> modo de escala de dpi” definido para “Sistema”, numa concha de poderes de administrador (win-x, a), executar:

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

para desfazer:

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

Em vez de HKCU poderia usar HKLM, mas depois já não pode alterar manualmente a configuração de escalonamento de dpi na caixa de diálogo de compatibilidade dos ficheiros java*.exe.

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

É necessário definir PreferExternalManifest em regedit e criar manifestos personalizados para java.exe e javaw.exe como dado no seguinte stackoverflow answe https://stackoverflow.com/a/39372897

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

Experimente Java 10.

descobri que -Dsun.java2d.dpiaware=false não funciona em Java 9 ou 10. Também para Java 8 e 9 a minha aplicação de balanço é pequena, mas o Java 10 tem os tamanhos adequados nas janelas!

então para uma aplicação que pode correr a partir de um ficheiro de morcego como: java -jar xxx.jar

acabei de adicionar JAVA_HOME=….\java_10 e PATH=%JAVA_HOME%bin;%PATH% no ficheiro de morcego.

java -jar xxx.jar

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

A solução do Elderry é boa, mas e se quiser executar um ficheiro de frasco no Windows e este não tiver opções de compatibilidade?

Vá a C:\Program Files (x86)\Java\jre\bin e encontre javaw.exe. Clique com o botão direito do rato, propriedades, separador de compatibilidade, verifique “override high DPI scaling behavior” e seleccione “System” (Note que “System enhanced” não funcionou para mim).

Agora as janelas de ficheiros em jarro devem escalar correctamente com texto legível. Caso contrário, pode significar que o Windows não liga ficheiros do tipo jarro a javaw.eve como deveria. Uma correcção de terceiros está disponível em: https://johann.loefflmann.net/en/software/jarfix/index.html

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

Tentei a maioria destas soluções, mas a que funcionou para mim foi definir o modo de compatibilidade do sistema nos ficheiros que encontrei no local seguinte:

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

Consegui obter um dpi sensato quando corria usando o prompt de comando, como por exemplo:

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