Java Swing项目打包为.exe可执行文件(含jre环境)

一、创建一个java项目

二、添加一个java类:

java类完整代码:

import javax.swing.*;
import java.awt.*;
import java.util.Arrays;

/**
 * 一个简单的带列表的Java应用程序,可接收命令行参数并显示在列表中。
 */
public class TableDemo extends JFrame {

    private DefaultListModel<String> listModel;
    private JList<String> listView;
    private JLabel statusLabel;

    public TableDemo(String[] args) {
        // 设置窗口标题
        super("窗口标题");

        // 定义表头
        String[] columnNames = {"序号", "姓名"};

        // 计算行数
        int argCount = (args != null) ? args.length : 0;

        // 创建数据数组(多一行用于提示)
        Object[][] data;
        if (argCount == 0) {
            data = new Object[1][2];
            data[0][0] = (Object) 1;
            data[0][1] = "未收到任何参数。";
        } else {
            data = new Object[argCount][2];
            for (int i = 0; i < argCount; i++) {
                String[] param = args[i].split(","); // 列之前用逗号分隔
                data[i][0] = param[0];         // 序号从1开始
                data[i][1] = param[1];         // 姓名
            }
        }
        // 创建表格模型和表格
        JTable table = new JTable(data, columnNames);
        table.setFillsViewportHeight(true);  // 表格填满面板高度
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // 启用自动调整:后续列(从第2列开始)平分剩余空间
        table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
        // === 设置列宽 ===
        //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 关闭自动调整,以便固定列宽
        table.setRowHeight(24);
        // 获取列模型
        javax.swing.table.TableColumnModel columnModel = table.getColumnModel();
        // 设置第一列(序号)宽度
        columnModel.getColumn(0).setPreferredWidth(40);  // 序号列:60像素宽
        // 设置第二列(参数值)宽度
        columnModel.getColumn(1).setPreferredWidth(120); // 参数值列:400像素宽

        // 添加滚动面板(JTable 通常放在 JScrollPane 中)
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setPreferredSize(new Dimension(300, 200));

        // 布局
        setLayout(new BorderLayout());
        add(scrollPane, BorderLayout.CENTER);

        // 窗口设置
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 600);
        // 设置窗口位置:left=100, top=100
        setLocationRelativeTo(null); // 居中显示
        // 不可改变大小
        //setResizable(false);
        // 显示窗口
        setVisible(true);
    }

    /**
     * 主方法 - 程序入口点
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 打印接收到的参数(用于调试)
        System.out.println("接收到的参数: " + Arrays.toString(args));

        // 使用 SwingUtilities.invokeLater 确保 GUI 在事件调度线程中创建
        SwingUtilities.invokeLater(() -> {
            try {
                // 可以在这里设置 LookAndFeel,例如:
                // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel());
                new TableDemo(args);
            } catch (Exception e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null,
                        "程序启动失败: " + e.getMessage(),
                        "错误",
                        JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        });
    }
}

直接运行项目,效果如下图所示:

三、将项目打包成jar文件

点确定后界面如下图,再点应用、确定:

再点构建工件:

构建后生成的jar位置如图,MySwing.jar:

四、打包程序运行所需要的精简版jre包

打开cmd,运行以下命令:

jlink --module-path $JAVA_HOME/jmods --add-modules java.desktop,java.logging --output myjre --compress 2 --no-header-files --no-man-pages

运行完成后,会在桌面-->个人账号目录下生成一个myjre文件夹。

五、生成exe文件

将 MySwing.jar 与 myjre文件夹 放到同一目录下,例: D:\test01。打开cmd, cd 到 D:\test01,然后执行以下命令:

jpackage --name MyWinDemo --input . --main-jar MySwing.jar --main-class TableDemo --type app-image --app-version 1.0 --vendor "zhangsan" --runtime-image myjre --dest D:\exeout

exe文件将生成在: D:\exeout目录,结构如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nbman2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值