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