मैं उच्च-डीपीआई डिस्प्ले पर अपग्रेड किए गए जावा ऐप कैसे चलाऊं?


75

मैं विंडोज़ 10 पर उच्च-डीपीआई डिस्प्ले पर जावा ऐप (जेएआर फ़ाइल) चलाने की कोशिश कर रहा हूं। ऐप स्विंग का उपयोग करता है और इस तरह डीपीआई-जागरूक नहीं है। आम तौर पर जब मैं एक ऐसा एप्लिकेशन चलाता हूं जो डीपीआई-जागरूक नहीं होता है, तो विंडोज मेरे लिए इसे तैयार करेगा, यद्यपि धुंधली। लेकिन किसी कारण से यह जावा ऐप को स्केल नहीं कर रहा है; मुझे असंभव-से-पढ़ा पाठ के साथ कोने में एक छोटी सी खिड़की मिलती है। मैं विंडोज 'हाई-डीपीआई (धुंधली) स्केलिंग के साथ जावा ऐप कैसे चलाऊं?


क्या यह आपका आवेदन है और क्या आप स्रोतों / वस्तुओं को नियंत्रित करते हैं, या यह एक विरासत अनुप्रयोग है जो अब अपरिवर्तनीय है?
harrymc

3
यह मेरा आवेदन नहीं है; स्रोत पर कोई नियंत्रण नहीं।
जेफ ई

बुरी खबर, आपको उस एप्लिकेशन को चलाने के लिए अपने डीपीआई को कम करना पड़ सकता है। यहां हैक के साथ कुछ संसाधन दिए गए हैं जो मदद कर सकते हैं: विंडोज 10 में धुंधले फोंट, विंडोज 10 में डीपीआई सेटिंग्स , विंडोज 10 डीपीआई धुंधला । कम से कम एक सिस्टम पुनर्स्थापना बिंदु बैकअप को उन्हें आज़माने से पहले बनाएं, बस मामले में। फ़ॉलबैक समाधान विंडोज 7.
harrymc

5
@harrymc उपरोक्त में से कैसे मदद करेगा? समस्या धुंधली फोंट नहीं है या यह चलाने के लिए मना कर दिया है, समस्या यह है कि सब कुछ छोटा है । "धुंधली" फ़ॉन्ट रेंडरिंग वही है जो मैं हासिल करना चाहता हूं , और जैसा कि मैंने ओपी के सवाल को समझा, वे भी करते हैं। डीपीआई स्केलिंग को 100% पर सेट करने से पूरा सिस्टम छोटा हो जाएगा; एक गैर-देशी को डिस्प्ले रिज़ॉल्यूशन सेट करने से सब कुछ धुंधला हो जाएगा। (ठीक है, मेरे लिए 1080p डिस्प्ले की तुलना में कोई
धब्बा

1
@harrymc और जब बाद में एप्लिकेशन को प्रयोग करने योग्य बनाया जा सकता है, तो मुझे यकीन है कि आप समझ गए होंगे कि इसका उत्तर "मैं 2160p के डिस्प्ले पर X काम कैसे करूं?" के साथ "एक बदतर प्रदर्शन का उपयोग करें" बिंदु को याद करने का एक प्रकार है।
मिलीमोसे

जवाबों:


37

यहाँ समस्या यह है कि स्विंग डिफ़ॉल्ट रूप से दावा करती है कि यह डीपीआई से अवगत है, इसलिए विंडोज़ इसे मापता नहीं है। इस व्यवहार को बंद करने के लिए इस स्विच का उपयोग करें और खिड़कियां आपके स्विंग ऐप को स्केल करना शुरू कर देंगी:

-Dsun.java2d.dpiaware=false

[संपादित करें: दुर्भाग्य से, यह ध्वज अब जावा IT में काम नहीं करता है, मैं इसे ६.१ में परीक्षण कर रहा था। ऐसा लगता है कि यह ज्ञात मुद्दा है ।]

[संपादित 2: आप सही ढंग से काम करने के लिए एक जावा 8 को संशोधित कर सकते हैं, EXE मैनिफ़ेस्ट को संशोधित करने के लिए एक प्रोग्राम का उपयोग कर सकते हैं। मैंने java.exe और javaw.exe के अंदर के मेनिफेस्टों में सेटिंग को सही से गलत में बदल दिया, और अब विंडोज 10 हाई डीपीआई में मेरे स्विंग प्रोग्राम्स को सही ढंग से स्केल किया। मैंने इसके लिए रिसोर्स ट्यूनर का उपयोग किया ।]

[संपादित करें ३] बस जावा ९ का उपयोग करें


क्या आप संपादन # 2 पर विस्तृत कर सकते हैं? आपने किस सेटिंग को मेनिफ़ेस्ट में संशोधित किया, बिल्कुल?
Tomalak

मैनिफेस्ट एक्सएमएल में, यह <asmv3: application> <asmv3: windowsSettings>
CarlG

यही तो बात है। मैंने वह ध्वज देखा है और मैंने उसे सेट कर दिया है false, लेकिन एप्लिकेशन (JNLP / WebStart) ने किसी भी तरह से ठीक नहीं किया। क्या आप यह जांचने के लिए एक सरल तरीका सोच सकते हैं कि क्या यह काम करता है या नहीं, उदाहरण के लिए एक परीक्षण ऐप जिसे आप जानते हैं कि इस सेटिंग का जवाब है?
तोमलक

वेबस्टार्ट विशेष रूप से बारीक है क्योंकि यह सटीक रूप से इंगित करना मुश्किल हो सकता है कि कौन सा निष्पादन योग्य है जिसमें jre distro आपने स्थापित किया है जिसका उपयोग करना आप समाप्त कर रहे हैं। क्रॉस-चेक के रूप में, मैं आपके ऐप को सीधे java.exe या javaw.exe के साथ लॉन्च करने की कोशिश करूंगा और यह देखने के लिए JWS को छोड़ दूंगा कि क्या कोई अंतर है।
कार्ल

4
यह कहीं न कहीं कॉमिक और फार्सिकल है। ढांचा अपनी क्षमताओं की गलत रिपोर्ट करता है और त्रुटि को ठीक करने वाले स्विच को हटा दिया जाता है। केवल काम के आसपास? अंत उपयोगकर्ताओं के लिए एक 3 पार्टी उपकरण खरीदने के लिए। और लोगों को आश्चर्य है कि जावा की इतनी खराब प्रतिष्ठा क्यों है।
बेसिक

68

बस मेरे विंडोज 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 में टास्क मैनेजर से राइट क्लिक करने और खोलने के द्वारा पाया गया
ब्रायन नॉबलुच

3
विंडोज़ 10 के लिए, जावा-आधारित माइनक्राफ्ट लॉन्चरों को चलाने के लिए, मुझे इसे (java.exe और javaw.exe) काम करने के लिए अपने सिस्टम पर सभी स्थापित जावा संस्करणों को बदलना पड़ा।
साइबर जूल

5
मैंने कम घुसपैठ वाले संस्करण का उपयोग किया। मैंने कमांड के लिए एक शॉर्टकट बनाया java -jar myJarFile.jarऔर उस शॉर्टकट (विंडोज 10, जावा 8) पर चरण 2 से 5 किया।
जूलियन क्रोनग

1
मेरे लिए, यह थाjavaw.exe
masterxilo

14

यदि आप इस सवाल पर अड़ गए हैं, लेकिन वास्तव में एक समाधान की तलाश कर रहे हैं जो लिनक्स पर काम करता है, तो यह आपके लिए है।

यदि आप javaद्विआधारी में पैरामीटर जोड़ सकते हैं जो एप्लिकेशन लॉन्च करता है, तो आप जावा 2 डी के लिए स्केलिंग फैक्टर निर्दिष्ट करने के -Dलिए sun.java2d.uiScaleप्रॉप्टी के लिए एक मान पारित करने के लिए विकल्प का उपयोग कर सकते हैं । यह आपके आवेदन का पैमाना होगा। स्केलिंग कारक मान एक डबल है। सुनिश्चित करें कि आप इस विकल्प को javaबाइनरी को ही पास करते हैं, लॉन्च किए गए जावा एप्लिकेशन को नहीं।

उदाहरण: 2.5 के UI स्केलिंग कारक के साथ NearInfinity.jar लॉन्च करें

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

मुझे यह लेख सामान्य रूप से HiDPI सिस्टम पर लिनक्स चलाने के लिए काफी उपयोगी लगा, और कुछ चीजें विंडोज पर भी काम कर सकती हैं: https://wiki.archlinux.org/index.php/HiDPI


यह अच्छा है, हालांकि मैं चाहता हूं कि मुझे JFrames के लिए 1 का स्केलिंग और जोओप्लेन के लिए स्केलिंग सिस्टम मिल सके।
नैट्स

1
मेरे लिए काम नहीं करता है।
एट जुवोनेन सेप

@AteteJuvonen के बजाय "मेरी कार काम नहीं करती है" बताने के बजाय, जब यह आपके लिए काम नहीं करता है, तो आपने एक नया प्रश्न पोस्ट नहीं किया है कि आपने क्या कोशिश की है, अपेक्षित परिणाम क्या था, वास्तविक क्या था परिणाम, आपने कौन सी कमांड लाइन का उपयोग किया है, और क्या, यदि कोई हो, त्रुटि संदेश आपको मिला है?
ईसाई हुजर

@ChristianHujer मैंने अपने जावा स्विंग ऐप को उस पैरामीटर के साथ लॉन्च करने की कोशिश की (उसी कमांड लाइन जो आपके उत्तर में है, जार को छोड़कर अलग है) और ऐप को स्केलिंग के बिना लॉन्च किया गया था।
एट जुवोनेन सेप

क्षमा करें यदि मैं असभ्य लगता हूं, तो निराश हो जाता हूं जब कुछ भी काम नहीं करता है। FWIW मैंने इस पर एक नया प्रश्न पोस्ट किया और जैसे ही साइट मुझे अनुमति देती है मैं इस पर एक बाउंटी भी पोस्ट करूंगा।
एट जुवोनेन सेप

10

समाधान: इसे JRE 9 पर चलाएँ।

ऐसा इसलिए है क्योंकि जावा रनटाइम ने खुद को "डीपीआई-जागरूक" घोषित किया था, लेकिन एडब्ल्यूटी और स्विंग के लिए वास्तव में इसका समर्थन नहीं किया। जावा अनुप्रयोगों को ठीक से स्केल किए जाने के बजाय पिक्सेल के आधार पर आकार और प्रदान किया गया, इसमें HiDPI डिस्प्ले शामिल हैं। वैसे भी, यह हाल ही में हल किया गया है। समस्या देखें JEP 263: विंडोज और लिनक्स पर हायडीपीआई ग्राफिक्स और अपग्रेड

इसलिए, फ़ॉन्ट आकार बढ़ाने से काम नहीं चलता (क्योंकि यह बाकी चीजों को नहीं बढ़ाता है); jvm तर्क -Dsun.java2d.dpiaware=falseकाम नहीं करता है (क्योंकि यह वास्तव में समर्थित नहीं है); और मैनिफ़ेस्ट फ़ाइल + रजिस्ट्री एडिट (विंडोज़ के लिए) सिर्फ काम नहीं करती है।

फिर, आपको इसे JRE 9 पर चलाने की आवश्यकता है क्योंकि यह वास्तव में इस सुविधा का समर्थन करता है।


अगर Java9 इसे ठीक करता है तो मैं वास्तव में उत्साहित हो जाऊंगा।
Music2myear

3
यह इंगित करने में विफल रहता है कि आपको कोड को पुनः प्राप्त करना है। बस उसी जावा 8- को जावा 9+ पर चलाने से एप्लिकेशन का व्यवहार नहीं बदलेगा
Ramhound

जावा 9 पर HiDPI प्रोग्राम चलाने से बहुत सारी समस्याएं हल हो जाती हैं। goo.gl/3zmL7b
Gernot क्रोस्ट

3
@ रामदूत आपको पुनर्मिलन नहीं करना है। मैंने अभी जावा 8 के लिए JDK8 के साथ एक जार बनाया है जो 4K स्क्रीन और 200% स्केल सेटिंग के साथ W10 सिस्टम पर फुलस्क्रीन JPanel के पेंट () विधि को ओवरराइड करता है। जावा 8 के java.exe के साथ चलाएँ, विधि को दी गई Graphics2D ऑब्जेक्ट में 1 का स्केलिंग है, और JPanel का गेटवेथ / ऊंचाई 3840x2160 है। जावा 9 के जावा के साथ चलाएँ, स्केलिंग 2 है और चौड़ाई / ऊँचाई 1920x1080 है।
ड्रीमस्पेस राष्ट्रपति

1
आपको जावा 9 में एक नया तरीका मिलेगा: Screen.getPrimary ()। GetOutputScaleX (); जो वास्तव में काम करता है। (दूसरा विकल्प JavaFX स्क्रीन साइज, (Screen.getPrimary ()। GetVisualBounds ()) का उपयोग करता है, जो इसे काम करता है, और टूलकिट.गेटफॉल्टटूलकिट ()। GetScreenRize () के खिलाफ इसे विभाजित करें, आप पाएंगे कि आप एक अनुमान प्राप्त कर सकते हैं। DPI में चयनित: 200% का परिणाम लगभग 2.0 होगा, लेकिन दुर्भाग्य से 125% का परिणाम अभी भी 1.0 स्केलिंग प्रतिशत में है। हालांकि, Java9 में जाने के बाद भी: मैंने पाया कि बटन के विस्तार के रूप में मैंने अपने GUIs को पूरी तरह से नष्ट कर दिया है, लेकिन कुछ स्थिरांक। (अंतराल, गद्दी आदि के लिए प्रयोग किया जाता) नहीं
wax_lyrical

4

सभी java एक्ज़िमेबल्स को "गुण> संगतता> डीपीआई स्केलिंग मोड" पर सेट करने के लिए "सिस्टम" पर सेट करने के लिए, एक एडमिनिस्ट्रेटर पॉवरशेल (जीत-ए), रन में:

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

एचकेसीयू के बजाय आप एचकेएलएम का उपयोग कर सकते हैं, लेकिन फिर आप डीपीआई-स्केलिंग सेटिंग को मैन्युअल रूप से गुणों में परिवर्तित नहीं कर सकते हैं> जावा की संगतता संवाद * .exe फ़ाइलें।


2

आपको regedit में PreferExternalManifest सेट करने और java.exe और javaw.exe के लिए कस्टम मैनिफेस्ट बनाने की आवश्यकता है जैसा कि निम्नलिखित stackoverflow उत्तर में दिया गया है https://stackoverflow.com/a/39372897


3
अच्छी खबर है, फॉल क्रिएटर्स अपडेट आपको आइटम पर राइट क्लिक करके, गुणों का चयन करके और फिर कम्पैटिबिलिटी टैब को बदलकर बदलाव करने की अनुमति देता है। एक कस्टम बाहरी प्रकट बनाने की अब आवश्यकता नहीं है - जो अच्छा है।
रिचर्ड

0

एल्डेरी का समाधान अच्छा है, लेकिन क्या होगा यदि आप विंडोज पर एक जार फ़ाइल चलाना चाहते हैं और इसमें संगतता विकल्प नहीं हैं?

C: \ Program Files (x86) \ Java \ jre \ bin पर जाएं और javaw.exe खोजें। राइट क्लिक, गुण, संगतता टैब, "उच्च डीपीआई स्केलिंग व्यवहार को ओवरराइड करें" और "सिस्टम" का चयन करें (ध्यान दें कि "सिस्टम बढ़ाया" मेरे लिए काम नहीं करता है)।

अब जार फाइल विंडो को पठनीय पाठ के साथ ठीक से स्केल करना चाहिए। यदि नहीं, तो इसका मतलब यह हो सकता है कि विंडोज जार प्रकार की फ़ाइलों को javaw.eve से लिंक नहीं करता है जैसे उसे करना चाहिए। एक थर्ड पार्टी फिक्स यहाँ उपलब्ध है: https://johann.loefflmann.net/en/software/jarfix/index.html


0

जावा 10 का प्रयास करें।

मैंने पाया कि -Dsun.java2d.dpiaware = false जावा 9 या 10. में काम नहीं करता है। इसके अलावा जावा 8 और 9 के लिए मेरा स्विंग ऐप छोटा है, लेकिन विंडोज़ में जावा 10 का आकार ठीक है!

तो एक ऐप के लिए जिसे आप बैट फाइल से चला सकते हैं जैसे: java -jar xxx.jar

मैंने अभी JAVA_HOME = .... \ java_10 और PATH =% JAVA_H%% \ bin जोड़ा है; बैट फ़ाइल में% PATH%।

java -jar xxx.jar


-2

मैंने इनमें से अधिकांश समाधानों की कोशिश की, लेकिन जो मेरे लिए काम करता है वह सिस्टम संगतता मोड को उन फ़ाइलों पर स्थापित कर रहा था जो मुझे निम्न स्थान पर मिली थीं:

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

2
सुपर उपयोगकर्ता में आपका स्वागत है! कृपया उत्तर के रूप में "धन्यवाद" या "मेरे लिए काम किया" को न जोड़ें। साइट में कुछ समय का निवेश करें और आप अपने पसंद के उत्तर को बढ़ाने के लिए पर्याप्त विशेषाधिकार प्राप्त करेंगे , जो आपको धन्यवाद कहने का सुपर उपयोगकर्ता तरीका है।
बर्टिएब

यह किसी और के जवाब पर टिप्पणी हो सकती है। ठीक करने के लिए, इसे लागू करने के लिए आवश्यक है अनुकूलता सेटिंग्स को java.exeऔर / या javaw.exeया अन्य सिफारिशों का उपयोग करें। javapathफ़ोल्डर नवीनतम जावा निष्पादनयोग्य सिस्टम पर स्थापित करने के लिए लिंक शामिल हैं। इस प्रकार सेटिंग्स को लागू Program Filesकरना पर्याप्त होना चाहिए।
एलेक्सी इवानोव

-4

जब मैं कमांड प्रॉम्प्ट का उपयोग करके भागा, तो मैं समझदार डीपीआई प्राप्त करने में सक्षम था:

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

यह वास्तव में प्रश्न का उत्तर नहीं देता है, और यह किसी भी उच्च डीपीआई सेटिंग्स को नहीं बदलता है java.exeया नहीं javaw.exe
एलेक्सी इवानोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.