在Java 6和Java 7中使用透明窗口

我正在开发Java 6 (1.6.0_24)中的应用程序,它使用透明的JFrame来获取消失的动画。 这是我的代码:

 public static void slowDisappearWindowAction(Window source, int milisSlow, int milisFast) throws InterruptedException{ float level = 1.0f; //slow effect -> 50% for(int i=0; i 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另一台PC上进行测试时,我遇到了错误:

  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(...)而不是AWTUtilities方法。

可以在Java 6应用程序中使用透明度,它将在Java 7上运行吗?

请参阅如何创建半透明和形状的Windows ..它提到了一个“每像素”半透明,您可以利用它来创建一个带有java 7的窗口的窗口,该窗口具有java 6中不再可用的半透明窗口的外观。 所以基本上你必须编码以适应其中任何一种,或者你可以使用“统一的半透明”,这两种方式都适用。

渐变半透明窗口