ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 启动窗口在mac中不起作用

2019-07-12 19:59:47  阅读:227  来源: 互联网

标签:java user-interface swing splash-screen


在显示JAVA 6 Splash屏幕时遇到问题我使用以下方法来显示启动窗口.

File splashImageFile = new File(Constants.PATH_IMAGE + "splash.png");
        final BufferedImage img = ImageIO.read(splashImageFile);
        final JWindow window = new JWindow() {
            private static final long serialVersionUID = -132452345234523523L;

            @Override
            public void paint(Graphics g) {
                Graphics2D g2 = (Graphics2D) g.create();
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
                Rectangle windowRect = getBounds();
                try {
                    Robot robot = new Robot(getGraphicsConfiguration().getDevice());                        
                    BufferedImage capture = robot.createScreenCapture(new Rectangle(windowRect.x, windowRect.y, windowRect.width, windowRect.height));
                    g2.drawImage(capture, null, 0, 0);
                } catch (IllegalArgumentException iae) {
                    System.out.println("Argumets mis matched.\n" + iae.getMessage());
                } catch(SecurityException se){
                    System.out.println("Security permission not supported\n" + se.getMessage());
                } catch (AWTException ex) {
                    System.out.println("Exception found when creating robot.\n" + ex.getMessage());
                }
                g2.drawImage(img, 0, 0, null);
                g2.setFont(new Font("TimesRoman", Font.BOLD, 15));
                g2.drawString("Loading...", 320, 260);
                g2.dispose();
            }
        };
        window.setAlwaysOnTop(true);
        window.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
        window.pack();
        window.setLocationRelativeTo(null);
        window.setVisible(true);
        window.repaint();

图像是png透明图像,因为我需要在窗口中使用圆角矩形.它适用于Win 7但在mac 10.8中. Mac仍然显示矩形形状背景.它实际上似乎不是背景.有人可以告诉我可能导致什么.以下是每个平台的图像.

在窗户上

在mac上

提前致谢.

编辑:

答案很棒但我已经看到AWTUtilities并不总是获得系统支持.所以在一些系统中,回答方法可能会失败.难道没有正式的解决方案吗?我的意思是解决方案来自基础水平?

解决方法:

要获得统一的解决方案,您应该使用Java7.每个像素半透明几乎是Java 6中的“实验性”功能,并且不被认为是您可以依赖的东西(这就是为什么AWTUtilities进入com.sun包,which is not part of Java public API).

然而,虽然我还没有Mac测试它,但我看到人们报告将帧背景设置为Color(0,0,0,0)(最后一个参数是alpha通道)在MacOS中为它们工作.我不清楚它是否在Windows中工作(几年前我不得不使用它),但我刚刚在Linux中测试它并没有.

在Java 7中,半透明窗口完全受支持,并且在Windows,MacOS和Linux中完美运行. JFrame有新的setOpacity(Alpha)方法(仅适用于未修饰的帧)和setColor(新的Color(R,G,B,Alpha))也在工作(它是等效的,并且只能用于未修饰的帧).

如您所见,您不能依赖私有API AWTUtilities.在Java 6中,你没有针对这个问题的任何“正式解决方案”,只有黑客,私有API和不确定性……我不知道它是否是一个选项,但你应该考虑切换到Java7,如果可以的话.

标签:java,user-interface,swing,splash-screen
来源: https://codeday.me/bug/20190712/1444201.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有