2013-05-17 2 views
10

मेरे पास एक ऐसा एप्लिकेशन है जिसके लिए पासवर्ड के लिए उपयोगकर्ता इनपुट की आवश्यकता है।ग्राफिक्सइन्वायरमेंट मौजूद है या नहीं, यह निर्धारित करने के लिए कि

मैं क्या करना चाहता हूं या तो कंसोल से पासवर्ड पढ़ना है (यदि ओएस एक यूनिक्स यूनिक्स का समर्थन करता है) या जॉप्शनपेन प्रदर्शित करें और उपयोगकर्ता को अपना पासवर्ड दर्ज करने के लिए कहें (यदि ओएस ग्राफिकल इंटरफेस जैसे विंडोज़ का समर्थन करता है)।

कुछ लोग तर्क दे सकते हैं कि उपरोक्त दोनों मामलों में एक कंसोल हमेशा उपलब्ध रहेगा, इसलिए एक कंसोल इनपुट पर्याप्त होगा। लेकिन समस्या यह है कि जावा ऐप javaw.exe का उपयोग शुरू करता है तो एक कंसोल उपलब्ध नहीं है। इस प्रकार, मुझे यह निर्धारित करने का एक तरीका चाहिए कि मैं या तो केस कर सकता हूं या नहीं।

मेरी समस्या यह निर्धारित करने के लिए है कि एप्लिकेशन जो पर्यावरण चलाता है वह कंसोल या ग्राफिकल इंटरफ़ेस का समर्थन करता है या नहीं।

मुझे पता है कि एक स्थिर विधि मौजूद है GraphicsEnvironment.isHeadless() लेकिन जावा डॉक मुझे लगता है कि है कि इस विधि ओएस ग्राफिक्स का समर्थन करता है, तो भेद नहीं कर सकते, बल्कि अगर ओएस आई/ओ उपकरणों में से एक का समर्थन कर सकते से (कुंजीपटल से, माउस, स्क्रीन)।

क्या कोई इस बारे में और अधिक जानता है? क्या मैं ओएस को कंसोल या ग्राफिक्स पर्यावरण का समर्थन करने में सक्षम हूं?

अग्रिम धन्यवाद।

+1

सी [वहाँ एक सुरक्षित, कार्यक्रम संबंधी अगर यह एक घुमाओ विंडो खोलने के लिए सुरक्षित है निर्धारित करने के लिए रास्ता नहीं है?] (Http://stackoverflow.com/questions/5893236/is-there-a-safe-programmatic- रास्ता-से-निर्धारण-अगर-सुरक्षित-टू-ओपन-ए-स्विंग-विंड) – devnull

+0

@devnull आपके उत्तर के लिए धन्यवाद। तो वास्तव में, जैसा कि अन्य पोस्ट से पता चलता है, हैहेडलेस() विधि नौकरी करेगी। मैंने जावा दस्तावेज़ को गलत तरीके से व्याख्या किया होगा। हालांकि, मैं ऐप चलाने के लिए एक यूनिक्स मशीन खोजने की कोशिश करूंगा और मैं अपने निष्कर्ष यहां वापस पोस्ट करूंगा। – nikkatsa

उत्तर

15

GraphicsEnvironment.isHeadless() मामले में true वापस आ जाएगी:

  • प्रणाली संपत्ति java.awt.headlesstrue
  • अपने एक यूनिक्स/लिनक्स सिस्टम पर चल रहे हैं और वहाँ कोई DISPLAY वातावरण चर
सेट किया गया है करने के लिए स्थापित किया गया है

यहां वह कोड है जिसका उपयोग हेडलेस प्रॉपर्टी को पुनर्प्राप्त करने के लिए किया जाता है:

String nm = System.getProperty("java.awt.headless"); 

    if (nm == null) { 
     /* No need to ask for DISPLAY when run in a browser */ 
     if (System.getProperty("javaplugin.version") != null) { 
      headless = defaultHeadless = Boolean.FALSE; 
     } else { 
      String osName = System.getProperty("os.name"); 
      headless = defaultHeadless = 
       Boolean.valueOf(("Linux".equals(osName) || "SunOS".equals(osName)) && 
           (System.getenv("DISPLAY") == null)); 
     } 
    } else if (nm.equals("true")) { 
     headless = Boolean.TRUE; 
    } else { 
     headless = Boolean.FALSE; 
    } 

यदि आप जानना चाहते हैं कि कोई स्क्रीन उपलब्ध है या नहीं, तो आप GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() का उपयोग कर सकते हैं जो सभी उपलब्ध स्क्रीन लौटाता है।

import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.HeadlessException; 

public class TestHeadless { 

    private static boolean isReallyHeadless() { 
     if (GraphicsEnvironment.isHeadless()) { 
      return true; 
     } 
     try { 
      GraphicsDevice[] screenDevices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); 
      return screenDevices == null || screenDevices.length == 0; 
     } catch (HeadlessException e) { 
      e.printStackTrace(); 
      return true; 
     } 
    } 

} 
+0

उत्तर के लिए धन्यवाद। मेरी एकमात्र चिंता यह है कि, जब मैं isHeadless() विधि का आह्वान करता हूं और मैं कंसोल यूनिक्स पर्यावरण पर चल रहा हूं, तो क्या यह सच या गलत वापस आ जाएगा? क्योंकि जावाडॉक से मैं यह देख सकता था: "इस वातावरण में डिस्प्ले, कीबोर्ड और माउस का परीक्षण किया जा सकता है या नहीं," इस प्रकार मैंने सोचा कि यूनिक्स में भी (कीबार्ड उपलब्ध होगा) यह सच हो जाएगा। लेकिन मुझे लगता है कि आपका कोड मेरी समस्या का समाधान करेगा। एक बार फिर धन्यवाद। – nikkatsa

+2

@nikkatsa यह सब मेरे उत्तर में ऊपर समझाया गया है। यह जानकारी सीधे स्रोत कोड के विश्लेषण से ली गई है। –

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

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