Java 9下SplashScreen/JDialog无法居中问题求助
Java 9 启动画面(Splash Screen)无法居中的解决方案
刚从Java 8切换到Java 9遇到启动画面不居中的问题?我之前也碰到过类似情况——Java 9对Splash Screen的底层实现做了调整,默认的居中逻辑不再对代码构建的自定义启动画面生效,需要我们手动计算位置来实现居中。
核心解决思路
Java 9之后,代码创建的启动画面不会自动适配屏幕居中,我们需要主动获取屏幕的尺寸信息,计算出居中坐标后手动设置启动画面的位置。
具体代码实现
下面是调整后的示例代码,替换你原来的启动画面逻辑即可:
import java.awt.Dimension; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.SplashScreen; public class SplashScreenDemo { public static void main(String[] args) { SplashScreen splash = SplashScreen.getSplashScreen(); if (splash != null) { // 获取主屏幕的图形配置(多屏环境可按需指定目标屏幕) GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice() .getDefaultConfiguration(); Rectangle screenBounds = gc.getBounds(); Dimension splashSize = splash.getSize(); // 计算居中坐标:(屏幕宽度-启动画面宽度)/2,(屏幕高度-启动画面高度)/2 int centerX = (screenBounds.width - splashSize.width) / 2; int centerY = (screenBounds.height - splashSize.height) / 2; // 设置启动画面到居中位置 splash.setLocation(centerX, centerY); // 这里添加你的启动画面绘制逻辑(比如绘制文字、图片等) // Graphics2D g2d = splash.createGraphics(); // ... 绘制操作 ... // splash.update(); } // 后续应用初始化逻辑 } }
注意事项
- 调用
setLocation()前必须确保SplashScreen对象已被正确初始化,否则会抛出IllegalStateException。 - 如果是多屏幕环境,你可以通过
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()遍历所有屏幕,选择需要显示启动画面的屏幕配置。 - 如果你不需要自定义绘制逻辑,也可以直接使用JVM命令行参数
-splash:your_splash_image.png指定启动画面,这种方式下JVM会自动处理居中,无需额外代码。
内容的提问来源于stack exchange,提问作者user1631306
相关产品推荐
相关产品推荐

