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

Hoe kan ik Java apps upscalen op een hoog-DPI scherm?

Advertisement

Ik probeer een Java-app (JAR-bestand) uit te voeren op een hoog-DPI-scherm op Windows 10. De app gebruikt Swing en is dus niet DPI-bewust. Normaal gesproken wanneer ik een toepassing uitvoer die niet DPI-bewust is, zal Windows deze voor mij schalen, zij het wazig. Maar om de een of andere reden schaalt de Java app niet; ik krijg gewoon een piepklein venstertje in de hoek met onmogelijk te lezen tekst. Hoe kan ik een Java app draaien met Windows’ hoge-DPI (wazige) schaling?

Advertisement

Antwoorden (10)

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

Net een gemakkelijke oplossing gevonden op mijn Windows 10 machine:

  1. Zoek java.exe die je geïnstalleerd hebt.
  2. Klik met de rechtermuisknop op -> Properties
  3. Ga naar tabblad Compatibility
  4. Uitvinken Override high DPI scaling behavior.
  5. Kies System voor Scaling performed by:
38
38
38
2015-12-01 18:31:58 +0000

Het probleem hier lijkt te zijn dat Swing standaard beweert dat het DPI aware is, dus windows schaalt het niet. Gebruik deze schakelaar om dit gedrag uit te schakelen en windows zal beginnen met het schalen van je swing app:

-Dsun.java2d.dpiaware=false

[ EDIT: Helaas lijkt deze vlag niet meer te werken in Java 8, ik was het aan het testen in Java 6. Het lijkt erop dat dit een bekend probleem .] [ EDIT 2: Je kunt een Java 8 installatie aanpassen zodat het correct werkt, met behulp van een programma om de EXE manifests aan te passen. Ik veranderde de instelling van true naar false in de manifesten in java.exe en javaw.exe, en nu schalen mijn Swing programma’s correct in Windows 10 hoge dpi. Ik gebruikte Resource Tuner om dit.]

[Bewerk 3] Gebruik gewoon Java 9

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

Als je deze vraag tegenkwam maar eigenlijk op zoek bent naar een oplossing die werkt op Linux, dan is dit iets voor jou.

Als je parameters kunt toevoegen aan de java binary die de applicatie start, kun je de optie -D gebruiken om een waarde door te geven voor de sun.java2d.uiScale proprty om een schaalfactor voor Java2D op te geven. Dit zal uw toepassing schalen. De waarde van de schaalfactor is een dubbele waarde. Zorg ervoor dat u deze optie doorgeeft aan de java binary zelf, niet aan de gestarte Java-toepassing.

Voorbeeld: Start NearInfinity.jar met een UI schaalfactor van 2.5

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

Ik vond dit artikel in het algemeen erg nuttig voor het draaien van Linux op HiDPI systemen, en sommige van de dingen zouden ook op Windows kunnen werken: https://wiki.archlinux.org/index.php/HiDPI

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

Oplossing: Draai het op JRE 9.

Dit komt omdat de Java runtime zichzelf als “DPI-aware” verklaarde, maar dit niet echt ondersteunde voor AWT en Swing. Java applicaties werden op pixels gebaseerd in plaats van op de juiste schaal, ook HiDPI displays. Hoe dan ook, dit is onlangs opgelost. Zie de uitgave JEP 263: HiDPI Graphics on Windows and Linux en de upgrade .

Dus, het vergroten van de lettergrootte werkt niet (omdat het de rest van de dingen niet vergroot); het jvm argument -Dsun.java2d.dpiaware=false werkt niet (omdat het niet echt ondersteund wordt); en het manifest bestand + register bewerking (voor Windows) werkt gewoon niet.

Dan, Je moet het draaien op JRE 9 omdat die deze functie echt ondersteund.

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

Om alle java executables te dwingen om “properties > compatibility > dpi scaling mode” op “System” te zetten, in een administrator powershell (win-x, a), voer je uit:

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

om ongedaan te maken:

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

In plaats van HKCU zou u HKLM kunnen gebruiken, maar dan kunt u de dpi-schaalinstelling niet meer handmatig wijzigen in het dialoogvenster Eigenschappen_compatibiliteit van de java.exe bestanden.

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

Je moet PreferExternalManifest in regedit instellen en aangepaste manifesten maken voor java.exe en javaw.exe zoals gegeven in het volgende stackoverflow antwoord https://stackoverflow.com/a/39372897

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

Probeer Java 10.

Ik heb ontdekt dat -Dsun.java2d.dpiaware=false niet werkt in Java 9 of 10. Ook voor Java 8 en 9 is mijn swing app klein, maar Java 10 heeft de juiste afmetingen in windows!

dus voor een app die je kunt draaien vanuit een bat file als: java -jar xxx.jar

Ik heb zojuist JAVA\HOME=….java_10 en PATH=%JAVA_HOME%\bin;%PATH% toegevoegd in de bat file.

java -jar xxx.jar

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

Elderry’s oplossing is goed, maar wat als je een jar bestand op Windows wilt draaien en het heeft geen compatibiliteitsopties?

Ga naar C:Program Files (x86)\Java\jrebin en zoek javaw.exe. Klik met de rechtermuisknop, eigenschappen, tabblad compatibiliteit, vink “hoog DPI-schalingsgedrag opheffen” aan en selecteer “Systeem” (Merk op dat “Systeem verbeterd” niet werkte voor mij).

Nu zouden de vensters van het jar-bestand goed moeten schalen met leesbare tekst. Indien dit niet het geval is, kan het betekenen dat Windows jar-bestanden niet koppelt aan javaw.eve zoals het zou moeten. Een oplossing van een derde partij is beschikbaar op: https://johann.loefflmann.net/en/software/jarfix/index.html

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

Ik heb de meeste van deze oplossingen geprobeerd, maar degene die voor mij werkte was het instellen van de systeemcompatibiliteitsmodus op de bestanden die ik op de volgende locatie vond:

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

Ik was in staat om verstandige dpi te krijgen wanneer ik commando prompt gebruikte zoals:

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