고 DPI 디스플레이에서 업 스케일 된 Java 앱을 어떻게 실행합니까?


75

Windows 10의 DPI가 높은 디스플레이에서 Java 앱 (JAR 파일)을 실행하려고합니다.이 앱은 Swing을 사용하므로 DPI를 인식하지 않습니다. 일반적으로 DPI를 인식하지 못하는 응용 프로그램을 실행하면 흐리게 처리되지만 Windows에서 응용 프로그램을 확장합니다. 그러나 어떤 이유로 Java 앱을 확장하지 않습니다. 읽을 수없는 텍스트가있는 작은 구석에 작은 창이 있습니다. Windows의 높은 DPI (흐릿한) 스케일링으로 Java 앱을 어떻게 실행합니까?


응용 프로그램입니까, 소스 / 객체를 제어합니까, 아니면 현재 변경할 수없는 레거시 응용 프로그램입니까?
harrymc

3
내 응용 프로그램이 아닙니다. 소스를 제어하지 않습니다.
Jeff E

나쁜 소식은 해당 응용 프로그램을 실행하기 위해 DPI를 낮추어야 할 수도 있습니다. 다음은 도움이 될 수있는 해킹과 관련된 리소스입니다. Windows 10의 모호한 글꼴 수정 , Windows 10DPI 설정 , Windows 10 DPI 모호한 수정 . 만일을 대비하여 최소한 시스템 복원 지점 백업을 작성하십시오. 대체 솔루션은 Windows 7로 돌아 오는 것일 수 있습니다.
harrymc

5
@harrymc 위의 방법 중 하나가 어떻게 도움이됩니까? 문제는 글꼴이 흐릿하지 않거나 실행을 거부하는 것입니다 . 문제는 모든 것이 작다 는 것입니다 . "흐릿한"글꼴 렌더링은 내가 달성 하고자 하는 것이며 OP의 질문을 이해했을 때도 마찬가지입니다. DPI 스케일링을 100 %로 설정하면 전체 시스템이 작아집니다. 디스플레이 해상도를 기본이 아닌 해상도로 설정하면 모든 것이 흐리게 보입니다. (좋아요, 저를 위해 1080p 디스플레이보다
희미

1
@harrymc 후자는 앱을 사용 가능하게 만들지 만 왜 "2160p 디스플레이에서 X가 작동하게합니까?" "나쁜 디스플레이를 사용"하는 것은 요점을 놓친 것입니다.
millimoose

답변:


37

여기서 문제는 Swing이 기본적으로 DPI를 인식한다고 주장하므로 창은 크기를 조정하지 않습니다. 이 스위치를 사용하여이 동작을 끄면 창에서 스윙 앱의 크기 조정이 시작됩니다.

-Dsun.java2d.dpiaware=false

[편집 : 불행히도이 플래그는 더 이상 Java 8에서 작동하지 않는 것 같습니다. Java 6에서 테스트했습니다 . 알려진 문제인 것 같습니다 .]

[편집 2 : EXE 매니페스트를 수정하는 프로그램을 사용하여 Java 8 설치를 올바르게 작동하도록 수정할 수 있습니다. java.exe 및 javaw.exe 내부의 매니페스트에서 설정을 true에서 false로 변경했으며 이제 Swing 프로그램이 Windows 10 높은 dpi에서 올바르게 확장됩니다. 내가 사용하는 자원 튜너를 여기에.]

[편집 3] 그냥 Java 9를 사용하십시오


편집 # 2에 대해 자세히 설명해 주시겠습니까? 매니페스트에서 정확히 어떤 설정을 수정 했습니까?
Tomalak

매니페스트 XML에서 <asmv3 : application> <asmv3 : windowsSettings> 아래의 <dpiAware> 플래그입니다.
CarlG

그게 요점입니다. 이 플래그를보고로 설정 false했지만 응용 프로그램 (JNLP / WebStart)이 제대로 확장되지 않았습니다. 이 설정에 응답하는 테스트 앱과 같이 이것이 작동하는지 여부를 교차 확인하는 간단한 방법을 생각할 수 있습니까?
Tomalak

Webstart는 jre 배포판을 설치 한 실행 파일을 정확하게 찾아 내기가 어려울 수 있으므로 특히 까다 롭습니다. 교차 점검으로 java.exe 또는 javaw.exe로 직접 앱을 시작하고 JWS를 건너 뛰어 차이가 있는지 확인하려고합니다.
CarlG

4
이것은 코믹과 파 사이의 어딘가에 있습니다. 프레임 워크가 기능을 잘못보고하고 오류를 수정 한 스위치가 제거되었습니다. 유일한 해결 방법? 최종 사용자가 타사 도구를 구매할 수 있습니다. 그리고 사람들은 왜 Java가 그렇게 평판이 좋지 않은지 궁금합니다.
기본

68

내 Windows 10 컴퓨터에서 쉬운 해결책을 찾았습니다.

  1. java.exe설치 한 것을 찾으십시오 .
  2. 오른쪽 클릭-> Properties
  3. Compatibility탭으로 이동
  4. 검사 Override high DPI scaling behavior.
  5. 선택 System에 대한Scaling performed by:

5
최선의 해결책-.jnlp 파일을 실행하는 데이 문제가 발생하여 "C : \ Program Files \ Java \ jre1.8.0_131 \ bin \ jp2launcher.exe"를 변경해야했지만 이것은 매력처럼 작동했습니다.
Dror Harari

저에게는 JDK 버전이었습니다. 마우스 오른쪽 버튼으로 클릭하고 윈도우 10에서 작업 관리자에서 옵션을 열어 찾을 수
브라이언 Knoblauch

3
Java 기반 Minecraft 실행기를 실행하는 Windows 10의 경우 시스템에 설치된 모든 Java 버전을 변경해야 작동했습니다 (java.exe 및 javaw.exe).
cyberbit

5
덜 관입적인 변형을 사용했습니다. 명령 바로 가기를 만들고 java -jar myJarFile.jar해당 바로 가기 (Windows 10, Java 8)에서 2-5 단계를 수행했습니다.
Julien Kronegg '

1
나를 위해, 그것은javaw.exe
masterxilo

14

이 질문을 우연히 발견했지만 실제로 Linux에서 작동하는 솔루션을 찾고 있다면 이것이 당신을위한 것입니다.

java애플리케이션을 시작 하는 바이너리 에 매개 변수를 추가 할 수있는 경우 옵션 -D을 사용 하여 sun.java2d.uiScale속성 값을 전달하여 Java2D의 스케일링 계수를 지정할 수 있습니다. 응용 프로그램이 확장됩니다. 스케일링 계수 값은 두 배입니다. java시작된 Java 응용 프로그램 이 아니라이 옵션을 이진 자체에 전달하십시오 .

예 : UI 스케일링 계수가 2.5 인 NearInfinity.jar을 시작하십시오.

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

이 기사는 일반적으로 HiDPI 시스템에서 Linux를 실행하는 데 매우 유용하며 일부 기능은 Windows에서도 작동 할 수 있습니다. https://wiki.archlinux.org/index.php/HiDPI


JFrames의 스케일링과 JOptionPanes의 시스템 스케일링을 얻을 수 있기를 바랍니다.
NateS

1
나를 위해 작동하지 않습니다.
Atte Juvonen

@AtteJuvonen 그냥 "내 차가 작동하지 않습니다"라고 말하지 않고, 당신에게 효과가 없을 때, 시도한 것, 예상되는 결과, 실제 결과를 설명하는 새로운 질문을 게시하지 않는 이유 결과, 어떤 명령 줄을 사용했는지, 어떤 오류 메시지가 있습니까?
Christian Hujer

@ChristianHujer 해당 매개 변수 (jar의 경로가 다른 것을 제외하고 답변의 것과 동일한 명령 줄)로 Java Swing 앱을 시작하려고 시도했지만 앱이 크기 조정없이 시작되었습니다.
Atte Juvonen

내가 무례 해 보인다면 미안하지만 아무것도 효과가 없을 때 실망했습니다. FWIW 나는 이것에 대해 새로운 질문을 게시했으며 사이트에서 허용되는 즉시 현상금을 게시 할 것입니다.
Atte Juvonen

10

솔루션 : JRE 9에서 실행하십시오.

Java 런타임 자체가 "DPI 인식"으로 선언되었지만 실제로 AWT 및 Swing에 대해 지원하지 않았기 때문입니다. Java 응용 프로그램은 크기가 적절하지 않고 픽셀을 기준으로 크기가 조정되고 렌더링되었으며 여기에는 HiDPI 디스플레이가 포함되었습니다. 어쨌든, 이것은 최근에 해결되었습니다. JEP 263 : Windows 및 Linux의 HiDPI 그래픽업그레이드 문제를 참조하십시오 .

따라서 글꼴 크기를 늘리면 작동하지 않습니다 (나머지가 증가하지 않기 때문에). jvm 인수 -Dsun.java2d.dpiaware=false가 작동하지 않습니다 (실제로 지원되지 않기 때문에). 매니페스트 파일 + 레지스트리 편집 (Windows의 경우)은 작동하지 않습니다.

그런 다음이 기능을 실제로 지원하므로 JRE 9에서 실행해야합니다.


Java9 에서이 문제를 해결하면 정말 기쁠 것입니다.
music2myear

3
이것은 코드를 다시 컴파일해야한다는 것을 지적하지 못합니다. Java 9+에서 동일한 Java 8 응용 프로그램을 실행
해도

Java 9에서 HiDPI 프로그램을 실행 하면 많은 문제가 해결됩니다. goo.gl/3zmL7b
Gernot Krost

3
@Ramhound 다시 컴파일하지 않아도됩니다. 방금 4K 화면 및 200 % 배율 설정을 사용하는 W10 시스템에서 전체 화면 JPanel의 paint () 메소드를 대체하는 Java 8 용 JDK8로 jar을 빌드했습니다. Java 8의 java.exe로 실행하면 메소드에 제공된 Graphics2D 객체의 스케일링은 1이고 JPanel의 getWidth / height는 3840x2160입니다. Java 9의 java.exe로 실행하면 크기 조절은 2이고 너비 / 높이는 1920x1080입니다.
Dreamspace President

1
Java 9에서 새로운 메소드를 찾을 수 있습니다. Screen.getPrimary (). getOutputScaleX (); 실제로 작동합니다. (다른 옵션은 작동하는 JavaFX 화면 크기 (Screen.getPrimary (). getVisualBounds ())를 사용하여 Toolkit.getDefaultToolkit (). getScreenSize ()와 나누는 것입니다. 추측 할 수 있습니다. 선택한 DPI에서 : 200 %는 약 2.0이되지만 불행히도 125 %는 여전히 1.0 스케일링 비율을 나타냅니다. (갭, 패딩 등에 사용)
wax_lyrical

4

관리자 파워 쉘 (win-x, a)에서 모든 Java 실행 파일이 "속성> 호환성> dpi 스케일링 모드"를 "시스템"으로 설정하도록하려면 다음을 실행하십시오.

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

실행 취소 :

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

HKCU 대신 HKLM을 사용할 수 있지만 java * .exe 파일의 특성> 호환성 대화 상자에서 더 이상 dpi 스케일링 설정을 수동으로 변경할 수 없습니다.


2

regedit에서 PreferExternalManifest를 설정하고 다음 stackoverflow 응답 https://stackoverflow.com/a/39372897에 제공된대로 java.exe 및 javaw.exe에 대한 사용자 정의 매니페스트를 작성해야합니다.


3
다행스럽게도 Fall Creators 업데이트를 사용하면 항목을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 호환성 탭을 선택하여 크기 조절 동작을 변경할 수 있습니다. 더 이상 사용자 정의 외부 매니페스트를 만들 필요가 없습니다.
Richard

0

Elderry의 솔루션은 훌륭하지만 Windows에서 jar 파일을 실행하고 호환성 옵션이없는 경우 어떻게해야합니까?

C : \ Program Files (x86) \ Java \ jre \ bin으로 이동하여 javaw.exe를 찾으십시오. 마우스 오른쪽 버튼을 클릭하고 속성, 호환성 탭을 클릭 한 후 "높은 DPI 스케일링 동작 무시"를 선택하고 "시스템"을 선택하십시오 ( "시스템 향상"은 작동하지 않습니다).

이제 jar 파일 창을 읽을 수있는 텍스트로 올바르게 확장해야합니다. 그렇지 않으면 Windows가 jar 유형 파일을 javaw.eve에 링크하지 않는 것입니다. 타사 수정 프로그램은 https://johann.loefflmann.net/en/software/jarfix/index.html 에서 제공됩니다.


0

Java 10을 사용해보십시오.

Java 9 또는 10에서 -Dsun.java2d.dpiaware = false가 작동하지 않는다는 것을 알았습니다. Java 8 및 9의 경우 스윙 응용 프로그램은 작지만 Windows에서는 Java 10 크기가 적절합니다!

따라서 java -jar xxx.jar와 같은 박쥐 파일에서 실행할 수있는 앱의 경우

방금 bat 파일에 JAVA_HOME = .... \ java_10 및 PATH = % JAVA_HOME % \ bin; % PATH %를 추가했습니다.

자바 -jar xxx.jar


-2

대부분의 솔루션을 시도했지만 저에게 도움이 된 방법은 다음 위치에서 찾은 파일에서 시스템 호환성 모드를 설정하는 것이 었습니다.

C:\Program Files (x86)\Common Files\Oracle\Java\javapath

2
슈퍼 유저에 오신 것을 환영합니다! "감사합니다"또는 "이것이 저에게 도움이되었습니다"를 답으로 추가하지 마십시오. 사이트에 시간을 투자 하면 원하는 답변을 찬성 할 수있는 충분한 권한 을 얻게됩니다 . 이는 수퍼 유저의 말입니다. 감사합니다.
bertieb

이것은 다른 사람의 답변에 대한 의견 일 수 있습니다. 해결하기 위해서는 적용하는 것이 필요 호환성 설정java.exe및 / 또는 javaw.exe기타 권장 사항을 사용합니다. 이 javapath폴더에는 시스템에 설치된 최신 Java 실행 파일에 대한 링크가 포함되어 있습니다. 따라서 설정을 적용하면 Program Files충분합니다.
Alexey Ivanov

-4

다음과 같은 명령 프롬프트를 사용하여 실행했을 때 합리적인 dpi를 얻을 수있었습니다.

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

이것은 실제로 질문에 대답하지 않으며 java.exe또는의 높은 DPI 설정을 변경하지 않습니다 javaw.exe.
Alexey Ivanov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.