java – 启动窗口在mac中不起作用
作者:互联网
在显示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