You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:13:19