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

如何使用JAR文件显示启动画面?

如何使用JAR文件显示启动画面?

嘿,我来分享一个实用的Java启动画面实现方案,打包成JAR后也能正常运行,亲测有效!

下面是完整的示例代码,它用AWT实现了一个带动态加载提示的启动窗口,还包含了主窗口的基础框架:

package misc;

import java.awt.*;
import java.awt.event.*;

public class SplashDemo extends Frame implements ActionListener {

    // 绘制启动画面的动态内容
    static void renderSplashFrame(Graphics2D g, int frame) {
        final String[] comps = {"foo", "bar", "baz"};
        g.setComposite(AlphaComposite.Clear);
        g.fillRect(120,140,200,40);
        g.setPaintMode();
        g.setColor(Color.BLACK);
        g.drawString("Loading "+comps[(frame/5)%3]+"...", 120, 150);
    }

    public SplashDemo() {
        super("SplashScreen demo");
        setSize(300, 200);
        setLayout(new BorderLayout());
        
        // 构建菜单
        Menu m1 = new Menu("File");
        MenuItem mi1 = new MenuItem("Exit");
        m1.add(mi1);
        mi1.addActionListener(this);
        this.addWindowListener(closeWindow);

        MenuBar mb = new MenuBar();
        setMenuBar(mb);
        mb.add(m1);
        
        // 启动画面核心逻辑
        final SplashScreen splash = SplashScreen.getSplashScreen();
        if (splash == null) {
            System.out.println("当前环境不支持SplashScreen");
            return;
        }
        Graphics2D g = splash.createGraphics();
        if (g == null) {
            System.out.println("无法获取启动画面的绘图上下文");
            return;
        }
        // 模拟加载过程的动画循环
        for(int i=0; i<100; i++) {
            renderSplashFrame(g, i);
            splash.update();
            try {
                Thread.sleep(50);
            } catch(InterruptedException e) {
                e.printStackTrace();
            }
        }
        splash.close();
        // 加载完成后显示主窗口
        setVisible(true);
    }

    // 窗口关闭监听器
    private WindowListener closeWindow = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            dispose();
            System.exit(0);
        }
    };

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Exit")) {
            dispose();
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        new SplashDemo();
    }
}

关键细节说明:

  • renderSplashFrame方法:负责动态绘制加载提示文本,通过循环切换"foo/bar/baz"来模拟不同组件的加载状态,让启动画面更有动感。
  • SplashScreen类:这是Java官方提供的启动画面API,不需要额外依赖,直接使用即可。如果你的环境不支持它,代码会打印提示并直接进入主窗口。
  • 加载模拟:通过Thread.sleep(50)和循环更新画面,模拟真实的程序加载过程,你可以把这段逻辑替换成实际的初始化代码(比如加载配置、初始化服务等)。

打包成JAR的注意事项:

  1. 如果想用自定义图片作为启动画面:
    • 准备一张PNG/JPG格式的图片(比如splash.png),放在项目根目录。
    • 编写MANIFEST.MF文件,添加一行:SplashScreen-Image: splash.png。
  2. 打包命令:
    编译代码后,用以下命令打包:
    jar cvfm YourApp.jar MANIFEST.MF misc/SplashDemo.class splash.png
    
  3. 运行JAR:
    直接执行java -jar YourApp.jar就能看到启动画面啦!

备注:内容来源于stack exchange,提问作者rozerro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:28:11