2012-01-12 16 views
11

मुझे "ओपनएसयूएसई 11.4 (x86_64)" पर पूर्ण स्क्रीन मोड में जावा एप्लिकेशन चलाने की समस्या है। मैं जावा 1.6.0_26-बी03 का उपयोग कर रहा हूँ। ओरेकल साइट सेलिनक्स पर पूर्ण स्क्रीन में जावा - टास्क बार को कैसे कवर करें?

  1. उदाहरण:: Display Mode Test

    मैं पूर्ण स्क्रीन आवेदन के दो उदाहरण चलाने का प्रयास किया है।

  2. JDarkRoom.jar (सरल टेक्स्ट एडिटर) Codealchemists से डाउनलोड किया गया।

दोनों मामलों में मेरे पास एप्लिकेशन पर एक लिनक्स टास्क बार दिखाई देता है। यह सिस्टम सेटिंग्स/विन्यास के साथ कुछ होना चाहिए?

उत्तर

16

आप GraphicsDevice.setFullScreenWindow (window) के साथ "वास्तव में पूर्ण स्क्रीन" जाने में सक्षम होना चाहिए। हालांकि, सबसे लोकप्रिय जावा रनटाइम में बग के कारण, यह 1.6 = जावा 6 श्रृंखला में कुछ "टूटा" संस्करण चलाने वाले सिस्टम पर काम नहीं कर सकता है। मैंने इसका पूरी तरह से परीक्षण नहीं किया है, इसलिए हो सकता है कि पैच सामान्य जनसंख्या में प्रचारित न हो।

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7057287

पृष्ठभूमि/थ्योरी

ठीक है, इसलिए यहाँ बहुत अधिक जानकारी के लिए चला जाता है, और नहीं पर्याप्त मदद ... यहाँ का एक सा क्यों यह सही काम नहीं किया है ...

कोई लिनक्स डेस्कटॉप

नहीं है 10

पीसी-प्रकार मशीनों पर लिनक्स-आधारित ऑपरेटिंग सिस्टम, साथ ही अन्य यूनिस (मैकोज़क्स के लिए आंशिक अपवाद के साथ), आमतौर पर एक्स विंडो सिस्टम (उर्फ एक्स 11) का उपयोग करते हैं। एक्स के तहत, आपके पास एक एक्स सर्वर (आमतौर पर, "वीडियो ड्राइवर" जैसा कुछ होता है) और क्लाइंट जो उससे कनेक्ट होता है, अधिकतर मशीन से नहीं, लूपबैक)।

विंडोज़ का लेआउट और प्लेसमेंट विशेष क्लाइंट प्रोग्राम द्वारा नियंत्रित किया जाता है, जिसे विंडो प्रबंधक कहा जाता है। यह खिड़कियों को सजाने के लिए ज़िम्मेदार है (उदाहरण के लिए टाइटल बार ड्रॉइंग या हैंडल का आकार बदलें) और उन्हें पोजीशन करना।

आपका प्रोग्राम एक्स क्लाइंट होगा। यह अनुरोध - लेकिन मांग - स्क्रीन पर किसी निश्चित स्थिति या किसी निश्चित आकार पर प्लेसमेंट नहीं कर सकता है। आप जो चाहते हैं उसे देने के लिए विभिन्न विंडो प्रबंधक अधिक (या कम) प्रवण होते हैं।

छोड़कर, अधिकांश डेस्कटॉप अच्छी तरह से खेलते हैं(कभी कभी)

अब, अभी तक सबसे लिनक्स डेस्कटॉप ग्नोम डेस्कटॉप कश्मीर डेस्कटॉप के लिए एक मजबूत दूसरे स्थान के साथ उपयोग करते हैं, और कुछ अन्य लोगों में हैं काफी व्यापक उपयोग। "अच्छा" क्या है कि इन दोनों डेस्कटॉप वातावरण (साथ ही साथ कुछ अन्य, जैसे कि कम अंत पीसी के लिए एक्सएफसीई) फ्रीडिस्कटॉप.org विंडो प्रबंधक संकेत मानकों के अनुरूप है।

(सुपर-ओवर-सरलीकरण :) आमतौर पर, स्क्रीन के एक या अधिक किनारों पर पैनल होंगे।आमतौर पर, शीर्ष पर केवल एक है, लेकिन कई भिन्नताएं हैं। इन पैनल क्षेत्रों को "स्क्रीन का हिस्सा" नहीं माना जाता है, इसलिए विंडो प्रबंधक आपके एप्लिकेशन को बताता है, "नहीं, वह उस क्षेत्र के बाहर है जिसमें आपको खेलने की अनुमति है; यह स्क्रीन 1920 × 1080 नहीं है, यह केवल 18 9 0 × 1080 है। "बेशक, यह आपके ऐप को लिखते समय अनुमानित रूप से अलग-अलग व्यवस्था हो सकता है, और आप 800 × की भौतिक स्क्रीन के साथ मेरी नेटबुक पर हो सकते हैं। 480 केवल 780 × 480 होने का नाटक करता है।

99% ऐप्स के लिए, यह बढ़िया है। विंडोज पैनलों के रास्ते में नहीं आते हैं, इसलिए आप हमेशा महत्वपूर्ण नियंत्रण के लिए पैनल तक पहुंच सकते हैं, जैसे कि म्यूट मारना या किसी अन्य प्रोग्राम या किसी चीज़ पर स्विच करना।

ये "संकेत" आपको यह अनुरोध करने की अनुमति देते हैं कि आपकी शीर्ष-स्तरीय विंडो विशेष रूप से इलाज की जाए। उदाहरण के लिए, आप अनुरोध कर सकते हैं कि आपको कोई शीर्षक पट्टी न हो - या कम, "पैलेट" टाइप टाइटल बार; आप खिड़की सूची या टास्क बार या गतिविधियों के अवलोकन या सक्रिय विंडोज़ दिखाने के लिए जो भी अन्य इंटरफ़ेस का उपयोग किया जा सकता है, पर छोड़ने का अनुरोध कर सकते हैं; या, आप वास्तव में पूर्ण-स्क्रीन पर जाने का अनुरोध कर सकते हैं, और पैनलों के रास्ते से बाहर सब कुछ धक्का दे सकते हैं।

कल्पना यहाँ है: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html

और विफल:

असल में, विंडो प्रबंधक संकेत विनिर्देश सूर्य/ओरेकल (या रेड हैट, जो कॉपी किया द्वारा सही ढंग से पालन नहीं किया जा रहा था सूर्य/ओरेकल, या शायद आईबीएम बंद, क्योंकि उन्होंने शायद वही किया है, लेकिन मुझे कोई भी उनके बारे में शिकायत नहीं देख रहा है) ...

हालांकि, मुझे कुछ बगैर दिखाई देता है कि यह एक बग है (विशेष रूप से) साथ में के डेस्कटॉप पर्यावरण के विंडो मैनेजर (केडब्ल्यूआईएन), के रूप में स्पष्ट रूप से यह बग केवल केनो में दिखाई देता है, और जीनोम, एक्सएफसीई और दोस्तों में दिखाई देता है।

काम के आसपास

एक तरफ अपने जावा runtimes पैचिंग से (और/या अपने ग्राहकों को '), केवल वास्तविक ठीक प्लेटफ़ॉर्म-विशिष्ट जावा लाइब्रेरीज (उपयोग करने के लिए शायद का उपयोग कर अंतर्निहित AWT वस्तुओं हड़पने होगा प्रतिबिंब ... eww ...) और उचित विंडो संकेत सेट करें, स्वयं।

हां, यह सकल है ...

1

मैं का उपयोग किया है Oracle जावा संस्करण 1.6.0_31 और 1.6.0_26 पूर्ण स्क्रीन मोड का उपयोग कर। मैंने उबंटू पर टास्कबार के ऊपर दिखाई नहीं दे रही खिड़की के साथ कुछ परेशानी का अनुभव किया। हालांकि मैं इसे इस छोटे कोड नमूने के साथ काम करने में सक्षम था।

// Create a window for full-screen mode; add a button to leave full-screen mode 
GraphicsDevice gs = GraphicsEnvironment.getLocalGraphicsEnvironment(). 
        getDefaultScreenDevice(); 
        //or initialize this for a specific display 
Frame frame = new Frame(gs.getDefaultConfiguration()); 
Window win = new Window(frame); 
Canvas c = new Canvas(); 
c.setBackground(Color.RED); 
win.add(c); 
win.show(); //or setVisible(true); 

// Enter full-screen mode 
gs.setFullScreenWindow(win); 
win.validate(); 

चाल है कि काम खिड़की दिखाई पहले कर रहा है, तो पूर्ण स्क्रीन मोड में खिड़की का मौक़ा मिला। दिखाए जाने से पहले पूर्ण स्क्रीन मोड सेट करना परिणामस्वरूप विंडो के ऊपर टास्क बार में होता है।

+0

यह आपकी 'जीएस' ऑब्जेक्ट को परिभाषित करने के लिए सहायक और अधिक पूर्ण होगा। –

1

उपरोक्त में से कोई भी मेरे लिए काम नहीं करता है, मैं XUbuntu का उपयोग कर रहा हूं, लेकिन मैंने बस जेएफआरएएम के बजाय जेडविंडो का उपयोग करने की कोशिश की और यह काम किया! यह बहुत निराशाजनक था, उम्मीद है कि यह आपके लिए काम करता है। ओह मुझे जिक्र करना चाहिए कि मैंने एपीआई को अभी तक नहीं देखा है और मैं वास्तव में जेविंडो क्लास से परिचित नहीं हूं इसलिए मुझे यकीन नहीं है कि जेविंडो और जेएफआरएएम के बीच अंतर क्या है। सौभाग्य।

+0

क्या आपने सावधानी से प्रश्न पढ़ा? यह मुझे लगता है कि इसका जवाब नहीं है .. –

6

मुझे एहसास है कि यह प्रश्न थोड़ा पुराना है, लेकिन मैंने उसी जवाब की तलाश में ठोकर खाई।

GraphicsDevice d = GraphicsEnvironment 
    .getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
if (d.isFullScreenSupported()) { 
    frame.setUndecorated(true); 
    frame.setResizable(false); 
    frame.addFocusListener(new FocusListener() { 

     @Override 
     public void focusGained(FocusEvent arg0) { 
      frame.setAlwaysOnTop(true); 
     } 

     @Override 
     public void focusLost(FocusEvent arg0) { 
      frame.setAlwaysOnTop(false); 
     } 
    }); 
    d.setFullScreenWindow(frame); 
} else { 
    frame.setVisible(true); 
} 

फोकस श्रोता तो उपयोगकर्ता इसके बिना Alt-टैब या मेटा-डी खिड़की से बाहर तुरंत मजबूर कर सकता है फिर से:

प्रयोग का एक बहुत बाद, मैं एक अच्छा समाधान के साथ आया था ध्यान देते हैं।

यह केडीई 4 के साथ मेरे लिनक्स मिंट 15 सिस्टम पर काम करता है। मैं एक एनवीआईडीआईए एक्स-सर्वर का भी उपयोग कर रहा हूं।

आशा है कि इससे मदद मिलती है! मुझे बताएं कि यह आपके लिए भी काम करता है!

5

bgroenks की विधि पर बस एक परिशुद्धता:
यह java7 और Ubuntu 14.10 (एकता) पर java8 साथ काम ठीक है।

लेकिन: आपको frame.setResizable(true); अन्यथा सेट करना होगा, यह काम नहीं करेगा।

सावधान रहें: पूर्णस्क्रीन मोड केवल JFrame (कोई JDialog या JWindow) के साथ काम करता है।

यहाँ एक नमूना कोड: यह setVisible(true)

/** 
* @param frame 
* @param doPack 
* @return device.isFullScreenSupported 
*/ 
static public boolean fullScreen(final JFrame frame, boolean doPack) { 

    GraphicsDevice device = frame.getGraphicsConfiguration().getDevice(); 
    boolean result = device.isFullScreenSupported(); 

    if (result) { 
     frame.setUndecorated(true); 
     frame.setResizable(true); 

     frame.addFocusListener(new FocusListener() { 

      @Override 
      public void focusGained(FocusEvent arg0) { 
       frame.setAlwaysOnTop(true); 
      } 

      @Override 
      public void focusLost(FocusEvent arg0) { 
       frame.setAlwaysOnTop(false); 
      } 
     }); 

     if (doPack) 
      frame.pack(); 

     device.setFullScreenWindow(frame); 
    } 
    else { 
     frame.setPreferredSize(frame.getGraphicsConfiguration().getBounds().getSize()); 

     if (doPack) 
      frame.pack(); 

     frame.setResizable(true); 

     frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
     boolean successful = frame.getExtendedState() == Frame.MAXIMIZED_BOTH; 

     frame.setVisible(true); 

     if (!successful) 
      frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
    } 
    return result; 
} 

सादर, स्टीफन की जगह लेता है।

+0

मैं इसे 'सेट करने योग्य (सत्य)' और फोकस श्रोताओं के बिना काम करने में सक्षम था। मेरे पास एकमात्र मुद्दा वास्तव में प्रदर्शन मोड बदल रहा था, जिसे मैंने 'DisplayMode.BIT_DEPTH_MULTI' और' DisplayMode.REFRESH_RATE_UNKNOWN' का उपयोग करके हल किया था। जावा 8 के साथ कुबंटू 15.10 का उपयोग करना। – ray

+0

आपको बहुत धन्यवाद, आप राजा हैं। –