【实用工具】使用Java封装可执行exe应用全过程

目录

  • 编写java代码
  • 打包
  • 创建exe文件
  • 压缩
  • 总结

本文将使用exe4j将java项目封装为可以发送给他人使用的工具为例,来记录将java项目封装为exe文件的全过程

编写java代码

目标:创建相关java项目代码,以实现相关功能

  • 创建一个java项目,目录结构如下:

  • 代码如下:
CmdToolMain.java

package com.gf.tool_cmd.main;

import com.gf.tool_cmd.tool.CmdUtil;
import com.gf.tool_cmd.tool.JOptionPaneUtil;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class CmdToolMain {

    private static List<CMDRole> cmdRoles = new ArrayList<>();

    static {
        cmdRoles.add(new CMDRole("立刻关机", "shutdown -s -t 0"));
        cmdRoles.add(new CMDRole("计算器", "calc"));
        cmdRoles.add(new CMDRole("打开新记事本", "notepad"));
    }

    public static void main(String[] args) {
        String message = "请选择操作";
        String title = "gf_cmd_tool";
        List<String> items = cmdRoles.stream().map(CMDRole::getDescribe).collect(Collectors.toList());
        int i = JOptionPaneUtil.chooseOne(message, title, items, 0);
        if (i == -1) {
            System.exit(0);
        }
        CmdUtil.execCommand(cmdRoles.get(i).getCmd());
    }

    @Data
    @AllArgsConstructor
    private static class CMDRole{
        private String describe;
        private String cmd;
        }

}
CmdUtil.java

package com.gf.tool_cmd.tool;

public class CmdUtil {

    public static void execCommand(String[] command) {
        for (int i = 0; i < command.length; i++) {
            System.out.print(command[i] + " ");
        }
        try {
            Runtime.getRuntime().exec(command);

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public static void execCommand(String command) {
        try {
            Runtime.getRuntime().exec(command);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}
JOptionPaneUtil.java

package com.gf.tool_cmd.tool;

import javax.swing.*;
import java.io.IOException;
import java.util.List;

public class JOptionPaneUtil {

    /**
     * 弹窗展示信息
     * @param title 标题
     * @param message 信息
     */
    public static void showInfo(String title,String message){
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    }

    /**
     * 单选
     * @param objects 选项列表
     * @param defaultIndex 第几个作为默认
     * @return 选择了第几个
     */
    public static int chooseOne(String message,String title,List objects,int defaultIndex){
        int questionMessage = JOptionPane.ERROR_MESSAGE;
        ImageIcon icon = null;
        return chooseOne(message,title,objects, defaultIndex, questionMessage,icon);
    }

    /**
     * 单选
     * @param message 信息
     * @param title 标题
     * @param objects 选项列表
     * @param defaultIndex 第几个作为默认
     * @param messageType 消息类型 {@link JOptionPane#QUESTION_MESSAGE}
     * @return 选择了第几个
     */
    public static int chooseOne(String message,String title,List objects,int defaultIndex,int messageType,ImageIcon icon){
        Object o = JOptionPane.showInputDialog(
                null,
                message,
                title,
                messageType,
                icon,
                objects.toArray(),
                objects.get(defaultIndex)
        );
        return objects.indexOf(o);
    }

}
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gf</groupId>
    <artifactId>tool_cmd</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>tool_cmd</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 执行main方法之后效果如下:

到这项目代码就准备好了,下一步进行打包操作


打包

目标:打出可执行的jar包,为了后期版本更新,需要封装代码中引入第三方的jar文件

  • 依次点击 【FIle】->【Proiect structure】 进入项目设置(或者点击快捷按钮)

  • 创建module

  • 选择启动类
  • 选择第三方jar包执行方式
  • 选择打包配置文件存放目录

  • 右键点击1,创建lib文件夹
  • 将第三方jar放入lib,也可以使用maven编译命令,dependency:copy-dependencies 将用到的jar包提取出来,复制进lib文件夹
  • 点击jar,设置第三方jar路径
  • 点击4,进入设置
  • 为每个第三方jar添加lib/前缀,
  • 保存

  • 编译打包

  • 编译成功后就可以在上图的文件接口图中找到导出的artifacts文件夹

  • 得到最终的lib文件夹和jar文件后,在 tool_cmd_jar 文件夹内打开cmd,使用java -jar tool_cmd.jar命令即可尝试执行,一旦可以执行,即可进入下一步操作

详细打包步骤可参考文章【IDEA如何打包可运行jar的一个问题


创建exe文件

目标:下载并安装exe4j,使用exe4j对Java项目代码创建可运行的.exe文件

  • 进行jre环境校验

  • 如果不通过会有错误提示,需要调整java jre环境

  • 设置jre环境后可以在cmd里执行 java -version进行测试,如果出现以下打印,则为设置成功

  • 打开exe4j文件,下一步即可

  • 选择jar模式

  • 设置名称和等会封装的exe输出路径

  • 设置exe应用的名称和图标

  • 选择jar路径

  • 设置启动类

  • 填写jre版本

  • 完成封装,可以在这里保存当前配置到exe4j文件,以便下次再次使用

  • 执行完的文件夹,会生成一个gf_tool.exe文件

  • 启动gf_tool.exe会有这个提示,是因为exe4j软件没有激活是试用的

  • 打开exe4j,打开激活软件,然后按图中步骤点击激活

  • 激活成功后首页长这样,再次打开软件不会再有提示

压缩

目标:将项目文件压缩为自解压文件,便于传给他人使用

  • 使用winrar压缩软件将图中框选的文件进行压缩

  • 勾选自解压选项

  • 在高级里设置解压路径

  • 在高级里添加解压后生成的快捷方式

  • 至此,点击完成后压缩就完成了,使用时双击生成的tool_cmd.exe文件即可

  • 解压完成后,双击桌面生成的快捷方式,即可运行程序

总结

至此,全部制作步骤已经完成了。压缩得到的exe文件便可以交给其他人直接运行了。
后期可以加入自动更新模块,使项目每次启动时候检测服务器端是否有新的版本,并下载新版本的项目jar文件。
  • 制作ico的网址http://www.bitbug.net/
  • exe4j使用指南https://www.jb51.net/softs/577869.html
  • exe4j注册机下载地址https://www.jb51.net/softs/541579.html

本文为原创,仅代表个人观点,欢迎大家交流学习

原文地址:https://www.cnblogs.com/ant007/p/12034361.html

时间: 2024-10-26 21:29:48

【实用工具】使用Java封装可执行exe应用全过程的相关文章

ServiceModel 元数据实用工具 (Svcutil.exe)

ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档 一.SvcUtil.exe ServiceModel 元数据实用工具可在 Windows SDK 安装位置中找到,具体位置为 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin 功能 下表概括了此工具提供的各种功能,以及论述如何使用该工具的对应主题. 任务 主题 依据运行的服务或静态元数据文档生成代码 根据服务元数据生成 WCF 客户端 从

install4j 工具为java程序打包exe

用 install4j 工具为java程序打包exe 制作人:mark 制作时间:2013-05-02 ? 用Eclipse 将程序源码打包成jar文件. 打包jar方法我不做介绍了,相信大家都会,不会的百度一下吧. 准备工作. 将导出的jar包:aaa.jar,程序需要的图片:images,数据库database,以及你要生成exe文件后的图标 png图片,全部复制到一个SMMS文件夹下面. 打开安装好的install4j文件 输入程序全名Full Name,程序简称 Short Name,

java开启多进程,执行.exe文件

1. .exe文件的生成 使用自己生成的应用程序,该应用程序带有参数.为了简便,以打印  输入的参数 为例,该应用程序的源码如下: // myPrint.cpp #include < iostream > int main(int argc, char * argv[]){ char * it = argv[1]; if (it == nullptr){ std::cout << "This is nothing to be printed." <<

java 文件读写的实用工具

package org.rui.io.util; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.TreeSet; /** * 文件读写的实用工具 * @author lenovo * */ p

Java开发实用工具及组件应用

Java开发实用工具及组件应用(JFreeChart.PDF组件-iText.jasper report报表.Maven) 课程分类:Java 适合人群:中级 课时数量:40课时 用到技术:JFreeChart.SSH.Ant.Maven 涉及项目:报表应用 咨询qq:1840215592 1.1.课程的背景 该课程是北风品牌课程-<BF-TECH J2EE软件工程师就业课程> 第四阶段:课程三.Java常用开发工具与第三方组件课程. 鉴于目前项目的开发,所涉及到开发工具繁多,旨在培养大家常用

将Java程序打包成可执行EXE文件的步骤

需要的工具myeclipse .jar2exe(附上下载地址,直接解压就可以用链接: https://pan.baidu.com/s/1qYPRgXu 密码: wbva) 1.将Java项目导出成.jar包 鼠标右键项目名,选择导出 导出的方式选择Runnable JAR file,点击next继续 选择导出文件的路径: jar文件成功导出到桌面 2.用工具将jar文件打包成EXE可执行文件 选择刚才导出的jar文件 选择要导出程序的类型: 选择主类,图片可不选 导出程序的具体设置: 选择辅助j

python文件封装成可执行exe文件

最近写了一个小小的程序,需要进行封装exe,下面就给大家介绍一下如何用pyinstaller去封装程序为exe程序. 首先,需要安装一下pip这个应用,这个已经在前面的文章中说过了,windows和linux都有请借鉴windows和linux. 第二步,安装好pip之后,在cmd命令窗口中输入pip install pyinstaller即能安装上pyinstaller,那么接下来要介绍一下关于pyinstaller几个指令了:-w指令直接发布的exe应用带命令行调试窗口,在指令内加入-w命令

java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源

实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通过path设定传送方式 * 2.创建客户端 * 3.得到输入流 * 4.读取流准备工作 * 5.读取并写入 * @throws IOException * @throws ClientProtocolException * */ 1 public static String getHttpResul

【原创】中文分词系统 ICTCLASS2015 的JAVA封装和多线程执行(附代码)

本文针对的问题是 ICTCLASS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLASS2015的传送门(http://ictclas.nlpir.org/),其对中文分词做的比较透彻,而且有一定的可调式性.但是应用到实际开发中的话,多线程操作是必须的,因此有了本文的初衷. 可能有的小伙伴不太清楚ICTCLASS是干嘛的,下面是一段介绍:NLPIR汉语分词系统(又名ICTCLAS2015),主要功能包括中文分词:词性标注:命名实