java privilege的用法,在Java 6和Java 7中使用透明窗口

I'm developing application in Java 6 (1.6.0_24) which using transparent JFrame to get disappearing animation. Here is my code:

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);

}

It works fine on my machine, but when I tested it on another PC with Java 7 installed I have fallowing error:

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)

I think it is because in Java 7 I should use Window.setOpacity(...) instead of AWTUtilities methods.

It is possible to use transparency in Java 6 app, that will run on Java 7 ?

解决方案

See How to Create Translucent and Shaped Windows.. It mentions a "per pixel" translucency that you can leverage to make a window with java 7 that has the look and feel of the translucent window from java 6 which is no longer available. So basically you'd have to code to accommodate either, or you could go with a "uniform translucency" which works with both.

XaA8a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值