Estou tentando executar um aplicativo Java (arquivo JAR) em uma tela de alto DPI no Windows 10. O aplicativo usa o Swing e, portanto, não reconhece o DPI. Normalmente, quando executo um aplicativo que não reconhece DPI, o Windows o dimensionará para mim, embora embaçado. Mas, por algum motivo, não está dimensionando o aplicativo Java; Acabei de receber uma pequena janela no canto com texto impossível de ler. Como executo um aplicativo Java com a escala de alto DPI (embaçada) do Windows?
windows-10
java
high-dpi
Jeff E
fonte
fonte
Respostas:
O problema aqui parece ser que o Swing afirma, por padrão, que reconhece o DPI, para que o Windows não o dimensione. Use essa opção para desativar esse comportamento e o Windows começará a dimensionar seu aplicativo swing:
[EDIT: Infelizmente, esse sinalizador não parece mais funcionar no Java 8, eu estava testando no Java 6. Parece que esse é um problema conhecido .]
[EDIT 2: Você pode modificar uma instalação do Java 8 para funcionar corretamente, usando um programa para modificar os manifestos do EXE. Alterei a configuração de true para false nos manifestos dentro de java.exe e javaw.exe e agora meus programas Swing são dimensionados corretamente no Windows 10 dpi alto. Eu usei o Resource Tuner para isso.]
[Edit 3] Basta usar Java 9
fonte
false
, mas o aplicativo (JNLP / WebStart) não foi dimensionado corretamente de qualquer maneira. Você consegue pensar em uma maneira simples de verificar se isso funciona ou não, por exemplo, um aplicativo de teste que você conhece que responde a essa configuração?Acabei de encontrar uma solução fácil na minha máquina Windows 10:
java.exe
você instalado.Properties
Compatibility
guiaOverride high DPI scaling behavior.
System
paraScaling performed by:
fonte
java -jar myJarFile.jar
e executei as etapas 2 a 5 nesse atalho (Windows 10, Java 8).javaw.exe
Se você se deparou com essa pergunta, mas está realmente procurando uma solução que funcione no Linux, isso é para você.
Se você pode adicionar parâmetros ao
java
binário que inicia o aplicativo, pode usar a opção-D
para passar um valor para asun.java2d.uiScale
propriedade para especificar um fator de escala para Java2D. Isso dimensionará seu aplicativo. O valor do fator de escala é um dobro. Certifique-se de passar essa opção para ojava
próprio binário, não para o aplicativo Java iniciado.Exemplo: inicie o NearInfinity.jar com um fator de escala da interface do usuário de 2,5
Eu achei este artigo bastante útil em geral para executar o Linux em sistemas HiDPI, e algumas das coisas também podem funcionar no Windows: https://wiki.archlinux.org/index.php/HiDPI
fonte
Solução: execute-o no JRE 9.
Isso ocorre porque o tempo de execução Java declarou-se "sensível a DPI", mas na verdade não o suportava para AWT e Swing. Os aplicativos Java foram dimensionados e renderizados com base em pixels, em vez de serem adequadamente dimensionados, incluindo telas HiDPI. De qualquer forma, isso foi resolvido recentemente. Veja o problema JEP 263: HiDPI Graphics no Windows e Linux e a atualização .
Portanto, aumentar o tamanho da fonte não funciona (porque não aumenta o restante das coisas); o argumento jvm
-Dsun.java2d.dpiaware=false
não funciona (porque realmente não é suportado); e o arquivo de manifesto + edição do registro (para Windows) simplesmente não funciona.Em seguida, é necessário executá-lo no JRE 9, porque ele realmente suporta esse recurso.
fonte
Para forçar todos os executáveis java a ter "propriedades> compatibilidade> modo de escala de dpi" definido como "Sistema", em um PowerShell de administrador (win-x, a), execute:
desfazer:
Em vez de HKCU, você poderia usar o HKLM, mas não poderá mais alterar manualmente a configuração de escala de dpi na caixa de diálogo Propriedades> Compatibilidade dos arquivos java * .exe.
fonte
Você precisa definir PreferExternalManifest no regedit e criar manifestos personalizados para java.exe e javaw.exe, conforme fornecido na resposta a seguir stackoverflow https://stackoverflow.com/a/39372897
fonte
Obrigado por Kenneth. Acho que
C:\Program Files (x86)\Java\jre\bin\java.exe
, em seguida,right click -> properties -> compatibility tab -> "override high DPI scaling behavior"
e selecioneSystem
, então ele também works.I tentou a mesma maneira de mudar ojavaw.exe
'compatibilidade s, ele também funciona.PS: Eu corro
burpsuite.jar
no win10 1703 usando esse método.fonte
A solução de Elderry é boa, mas e se você quiser executar um arquivo jar no Windows e ele não tiver opções de compatibilidade?
Vá para C: \ Arquivos de Programas (x86) \ Java \ jre \ bin e localize javaw.exe. Clique com o botão direito do mouse, propriedades, guia compatibilidade, marque "substituir o comportamento de escala de DPI alto" e selecione "Sistema" (observe que "Sistema aprimorado" não funcionou para mim).
Agora, as janelas dos arquivos jar devem ser dimensionadas corretamente com texto legível. Caso contrário, isso pode significar que o Windows não vincula os arquivos do tipo jar ao javaw.eve, como deveria. Uma correção de terceiros está disponível em: https://johann.loefflmann.net/en/software/jarfix/index.html
fonte
Experimente o Java 10.
Eu descobri que -Dsun.java2d.dpiaware = false não funciona no Java 9 ou 10. Também para Java 8 e 9, meu aplicativo Swing é pequeno, mas o Java 10 é dimensionado corretamente no Windows!
portanto, para um aplicativo que você pode executar a partir de um arquivo bat como: java -jar xxx.jar
Acabei de adicionar JAVA_HOME = .... \ java_10 e PATH =% JAVA_HOME% \ bin;% PATH% no arquivo bat.
java -jar xxx.jar
fonte
Tentei a maioria dessas soluções, mas a que funcionou para mim foi definir o modo de compatibilidade do sistema nos arquivos que encontrei no seguinte local:
fonte
Eu era capaz de obter dpi sensíveis quando executado usando o prompt de comando, como:
fonte