2012-07-18 14 views
6

मैं Java 6 (1.6.0_24) में आवेदन के विकास कर रहा हूँ जो पारदर्शी JFrame का उपयोग कर गायब एनीमेशन प्राप्त करने के लिए पारदर्शी खिड़की का उपयोग करना।दोनों जावा 6 और जावा 7

public static void slowDisappearWindowAction(Window source, int milisSlow, int milisFast) throws InterruptedException{ 
    float level = 1.0f; 
    //slow effect -> 50% 
    for(int i=0; i<8 ; i++){ 
     level=level-0.05f; 
     AWTUtilities.setWindowOpacity(source,level); 
     Thread.sleep(milisSlow); 
    } 
    //fast effect -> 0% 
    for(int i=0; i<8 ; i++){ 
     level=level-0.05f; 
     AWTUtilities.setWindowOpacity(source,level); 
     Thread.sleep(milisFast); 
    } 
    AWTUtilities.setWindowOpacity(source,0.1f); 
} 

यह मेरी मशीन पर ठीक काम करता है, लेकिन जब मैं Java 7 के साथ एक और पीसी पर यह परीक्षण किया स्थापित मैं त्रुटि fallowing है:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: 
The frame is decorated 
    at java.awt.Frame.setOpacity(Unknown Source) 
    at java.awt.Window$1.setOpacity(Unknown Source) 
    at com.sun.awt.AWTUtilities.setWindowOpacity(Unknown Source) 
    at pl.design.bead.pattern.model.window.WindowHelper.slowDisappearWindowAction(WindowHelper.java:21) 
    at pl.design.bead.pattern.forms.MainForm$ExitController.windowClosing(MainForm.java:123) 
    at java.awt.AWTEventMulticaster.windowClosing(Unknown Source) 
    at java.awt.Window.processWindowEvent(Unknown Source) 
    at javax.swing.JFrame.processWindowEvent(Unknown Source) 
    at java.awt.Window.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$000(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

मुझे लगता है कि ऐसा इसलिए है क्योंकि में Java 7 मैं यहाँ मेरी कोड है AWTUtilities विधियों के बजाय Window.setOpacity(...) का उपयोग करना चाहिए।

यह Java 6 एप्लिकेशन में पारदर्शिता उपयोग करना संभव है कि Java 7 पर चलेगा?

+2

अगर यह केवल jdk6 में संकलन और jdk7 में चलाने के बारे में है, तो आप दोनों 6 और 7 एपीआई के लिए प्रतिबिंब इस्तेमाल कर सकते हैं। हालांकि, jdk7 में अपरिवर्तित विंडो के लिए अनुपलब्ध पारदर्शिता समर्थन के आसपास हैक करने का कोई तरीका नहीं है। – kleopatra

उत्तर

3

How to Create Translucent and Shaped Windows देखें .. यह एक "प्रति पिक्सेल" अनुवाद का उल्लेख करता है जिसे आप जावा 7 के साथ खिड़की बनाने के लिए लाभ उठा सकते हैं जिसमें जावा 6 से पारदर्शी खिड़की का स्वरूप और अनुभव है जो अब उपलब्ध नहीं है। तो मूल रूप से आपको या तो समायोजित करने के लिए कोड करना होगा, या आप "वर्दी पारदर्शिता" के साथ जा सकते हैं जो दोनों के साथ काम करता है।

Gradient Translucent Window

+0

आपके उत्तर के लिए धन्यवाद। इसलिए मुझे पहले संगतता की जांच करने और गायब होने वाली एनीमेशन से इस्तीफा देने की आवश्यकता है यदि यह समर्थित नहीं है? – Demiurg

+0

क्या? मैंने सोचा कि आपकी वर्तमान विधि 1.6 के लिए काम करती है। यदि ऐसा है, तो नई पारदर्शिता समर्थित होने तक इसका उपयोग करें, फिर शेष 1.6 और 1.7+ के लिए नई कार्यक्षमता का उपयोग करें। –

+0

हाँ, यह काम कर रहा है, लेकिन वास्तव में मेरे सवाल का कैसे 'जावा 6' के साथ ही कंप्यूटर पर पारदर्शी' JFrame' संकलित करने के लिए है, तो कार्यक्रम 'केवल जावा 7' के साथ कंप्यूटर पर ठीक से चलेगा है। लेकिन मुझे लगता है कि सबसे आसान समाधान जावा 7 पर स्विच है। – Demiurg