2013-03-27 4 views
59

यदि आपके पास 150 से अधिक डीपीआई (जैसे मैकबुक प्रो) के साथ मॉनीटर है, तो आपको समस्या भी मिल सकती है: जावा स्विंग ऐप पर फ़ॉन्ट उच्च डीपीआई मॉनिटर के लिए बहुत छोटा है, और मैं नहीं बदल सकता फ़ॉन्ट आकार बिल्कुल (यह सीधे विंडोज़ डीपीआई को अनदेखा करता है, केवल प्रदर्शित करता है, जो मूल डीपीआई -> 96) है। मैं स्क्रीन रिज़ॉल्यूशन को बदलने के अलावा कुछ भी नहीं कर सकता, जो पूरी तरह से एलसीडी पर सब कुछ धुंधला कर सकता है।विंडोज/लिनक्स पर जावा स्विंग ऐप्स के डीपीआई को कैसे सेट करें?

हां, मेरे पास एक उच्च डीपीआई मॉनिटर वाला लैपटॉप है, 15.6 '1920x1080 रिज़ॉल्यूशन के साथ, कुछ जावा डेस्कटॉप ऐप्स मेरे लैपटॉप पर बहुत छोटे लगते हैं, जैसे कि मैटलैब, बर्प्सुइट इत्यादि। मैं इंटरनेट के लिए बहुत ही खोज कर रहा हूं लंबे समय तक, लेकिन अभी भी समस्या के लिए एक विधि नहीं मिल रही है। मुझे पता है कि मैं जेआरई फोंट को JRE_HOME/lib/font/fontconfig.properties.src के माध्यम से बदल सकता हूं, लेकिन मुझे जावा डेस्कटॉप फोंट के लिए डिफ़ॉल्ट फ़ॉन्ट आकार या डीपीआई सेट करने के लिए कोई जगह नहीं मिल सकती है।

क्या समस्या का कोई समाधान नहीं है? क्या आपके पास उच्च डीपीआई मॉनीटर है? आप ऐसे ऐप्स के साथ कैसे करते हैं? स्विंग उच्च डीपीआई उपयोगकर्ताओं को छोड़ देता है?

+3

[यह] (http://stackoverflow.com/questions/1102216/can-i-set-the-dpi-resolution-of-my-java-swing-plplication-without-changing-the-s) शायद – Parth

+0

और [हमें अपने परिणाम बताएं] (http://meta.stackexchange.com/q/17463/163188) में मदद करें, इसलिए हम जानते हैं कि कैसे ईर्ष्या होना चाहिए। :-) – trashgod

+0

ऑफ-विषय: यदि सामान्य विंडोज प्रोग्राम अच्छी तरह से स्केल नहीं करते हैं, तब भी जब आप संगतता विकल्पों में "कोई डीपीआई स्केलिंग" ध्वज नहीं देते हैं, तो आप शायद प्रोग्राम के 64-बिट संस्करण चला रहे हैं। इसके बजाय 32-बिट संस्करण आज़माएं। –

उत्तर

35

मैं वर्तमान में विंडोज़ पर इस मुद्दे की जांच कर रहा हूं। यहां मैंने जो पाया है:

अधिकांश स्विंग लुक & लगता है कि उच्च डीपीआई का समर्थन नहीं करता है, यहां तक ​​कि निंबस भी नहीं, भले ही यह स्केलेबल हो। मैंने कुछ पुराने ब्लॉग पोस्टों को यह कहते हुए पाया कि निंबस अंततः उच्च डीपीआई स्केलिंग की पेशकश कर सकता है, लेकिन जाहिर है कि कभी नहीं हुआ।

एक अपवाद सिस्टम एलएएफ है लेकिन इसका डिफ़ॉल्ट फ़ॉन्ट सभी डीपीआई सेटिंग्स पर वास्तविक सिस्टम फ़ॉन्ट आकार से ~ 10% छोटा है। इसके अलावा, सिस्टम को यहां वर्णित रूप से स्पष्ट रूप से चुना जाना चाहिए: http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

कोई भी स्केलिंग कारक नहीं है जिसे आप स्विंग में सेट कर सकते हैं। विशिष्ट एलएएफ को स्केलिंग को संभालने के लिए कोड प्रदान करना होता है। तो सबसे अच्छा आप कर सकते हैं सिस्टम का चयन करें और उम्मीद है कि यह काफी अच्छा है।

हालांकि, जावाएफएक्स मेरे सिस्टम पर 150% तक सही तरीके से और स्वचालित रूप से स्केल करता है। यदि संभव हो, तो मेरा सुझाव है कि आप अपना जीयूआई बनाने के लिए जावाएफएक्स का उपयोग करें।

संपादित करें: मैंने कुछ छोटे परीक्षण कार्यक्रम किए और विभिन्न जीयूआई ढांचे, स्विंग थीम और डीपीआई सेटिंग्स के लिए तुलना स्क्रीनशॉट लिया। यह इस सवाल पढ़ने लोगों के लिए जानकारीपूर्ण हो सकता है: http://kynosarges.org/GuiDpiScaling.html

4

लिनक्स पर, यह संभव है किसी भी घुमाओ देखो के साथ स्केलिंग करते हैं और महसूस करने के लिए, नहीं लगता है अपने प्रयोगों के अनुसार। हालांकि, वीएनसी, vncdesk से जुड़े एक हैक का उपयोग करना संभव है।

.vncdesk/1/settings.ini:

[desktop] 
width = 1050 
height = 650 

[window] 
title = gradle 
name = gradle in vncdesk 
class = GradleInVncdesk 
scale_factor = 2 

.vncdesk/1/startup:

#!/bin/sh 
cd "$INVOCATION_DIR" 
matchbox-window-manager& 
exec gradle --gui "[email protected]" 
+0

इस मामले में न्यूनतम 'matchbox-window-manager' सही है। – Qdeep

2

मैं कामयाब इन निर्देशों का पालन इसे हल करने: Link यहाँ vncdesk तहत gradle --gui चलाने के लिए मेरी विन्यास है।

यह जर्मन में है, लेकिन मैं महत्वपूर्ण सामग्री का अनुवाद करूंगा।

इस रजिस्ट्री कुंजी बनाएँ:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide] 
"PreferExternalManifest"=dword:00000001 

इस सामग्री के साथ मालसूची फ़ाइल बनाएँ:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> 

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"> 
    </assemblyIdentity> 
    </dependentAssembly> 
</dependency> 

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"> 
    </assemblyIdentity> 
    </dependentAssembly> 
</dependency> 

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
    <requestedPrivileges> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false"/> 
    </requestedPrivileges> 
    </security> 
</trustInfo> 

<asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware> 
    </asmv3:windowsSettings> 
</asmv3:application> 

</assembly> 

बिन निर्देशिका में कॉपी जहां java.exe और javaw.exe के अंदर है और इसे java.exe.manifest और javaw.exe.manifest नाम दिया गया है (आपके पास एक ही सामग्री के साथ दो फाइलें होंगी लेकिन अलग-अलग नाम होंगे)।

एचटीएच।

बर्न्ड

+0

अफसोस की बात है, यह मेरे लिए कुछ भी नहीं बदल रहा था। मैं 32 बिट जावा चला रहा हूं, नहीं कि मुझे पता है कि मेरे पास कोई विकल्प था, अगर इससे कोई फर्क पड़ता है। संपादित करें: वास्तव में, समस्या को हल किया जा सकता है, कम से कम मेरे मामले में, जावा/javaw.exe की बजाय व्यक्तिगत ऐप के लिए एक मैनिफेस्ट बनाकर। प्रति http://javahacker.com/eclipse-on-a-high-dpi-display-in-windows/ –

+1

@AlexWhittemore लिंक किए गए आलेख को पढ़ने के बाद, मुझे कहना है कि, यह वही है जो इसे सलाह देता है - बनाने के लिए डीपीआई स्केलिंग को अक्षम करने के लिए ' .exe.manifest' फ़ाइल। Eferrari ने क्या कहा उससे अलग। – user8

+0

@ user8 मैंने कभी भी फ़ॉलो नहीं किया है, लेकिन हाँ, लिंक पूरी तरह से कहता है कि, अच्छा पकड़;) –

4

लघु जवाब: आप JRE पर इसे चलाने के लिए की जरूरत है 9.

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

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

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

+0

जावा 8 में, मुझे मैनिफेस्ट फ़ाइल javaw.exe में dpiAware पैरामीटर को स्विच करके मदद मिली थी – MisterParser

संबंधित मुद्दे