IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序

目录

本文导读

javafxpackager

简 述

jar 转 exe

运行测试

注意事项

IDEA 自动生成

项目代码

打包 exe

运行测试

资源文件位置


本文导读

1、很多时候把应用打包成可执行Jar文件,还是美中不足,因为整个应用被生成了一个 jar 文件

2、可以把Jar再转成exe应用,本文讲解两种方式

javafxpackager

简 述

1、从 JDK1.7u6 开始 Java FX 内置在Java SE中,同时为Javafx 提供了打包工具-javafxpackager.exe,如下所示。

2、这是推荐方式

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第1张图片

3、此种方式适用于任何可执行Jar应用,包括Java SE 与Java FX,也无论是IDEA生成的,还是Eclipse、MyEclipse生成的,或是其它方式生成的

jar 转 exe

1、以《IDEA 打包 可执行 Jar 程序》中 "Java SE应用"打包生成后的"china.jar"为例继续进行转换为exe应用

2、如下所示,现在china.jar可以放到任何安装了Java 运行环境的电脑上运行了,现在开始将它转为exe应用。

3、新建"jar"、"exe"两个目录,名字自己取,建议不含中文和空格就行,将"china.jar"放入到"jar"目录中

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第2张图片

使用命令行:javafxpackager -deploy -native image -appclass com.lct.main.MainApp -srcdir E:/wmx/logs/jar -outdir E:/wmx/logs/exe -outfile chinaApp -name china

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第3张图片

参数详解,可以直接在cmd输入"javafxpackager",然后回车,可以看到所有参数信息

-deploy:打包程序根据其他参数生成 jnlp 和 html文件

-native:生成自包含的应用程序包 (如果可能), 如果指定了类型, 则只创建此类型的包,所支持类型的列表包括: installer, image, exe, msi, dmg, rpm 和 deb。

-appclass:要执行的应用程序类的限定名称,即程序入口类的全路径。

-srcdir:待打包文件的基目录。

-outdir:要将输出文件生成到的目录的名称。

 -outfile:生成的文件的名称 (不带扩展名)。

这样生成好的文件就打包到l"exe"目录中了,下面的"china.jar"其实就是咋们打包的源文件,也就是"jar"目录下的可执行jar文件,需要的exe应用在"bundles"目录中

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第4张图片

需要的就是这个"china"目录,转换好的exe应用就在里面,可以将"china"放到任何安装了Java运行环境的电脑上运行

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第5张图片

运行测试

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第6张图片

注意事项

1、使用“javafxpackager”方式生成的exe程序包,虽然可以放到任意安装了Java环境的电脑上运行,但是exe放置的路径不能含有中文,否则运行失败含有空格没有关系

2、Java程序是在Java JVM中运行中的,所以跨平台,无论是64位还是32位操作系统都没有问题,而 Java JDK是区分系统的,而且还有64位于32位之分,不同的系统和位数就得下载安装不同的版本型号的Java JDK。

如果使用64位的Java JDK将Jar编译成exe,则此exe程序默认只能在64位Windows系统中运行;如果想要在32位windows系统中运行,则可以在32位的电脑系统上安装32位的Java JDK,然后重新编译即可。

IDEA 自动生成

1、IDEA可以将Java Web项目直接转成war包,可以将Java SE 直接转成 Jar包,同理 IDEA 可以直接将Java FX转成exe应用

2、以《IDEA 打包 可执行 Jar 程序》中 "Java FX应用"继续进行讲解说明

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第7张图片

项目代码

import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;
/**
 * Created by Administrator on 2018/6/29 0029.
 * 日志工具类
 */
public class LogWmxUtils {

    private static final String LOG_DIR_PATH;

    static {
        ResourceBundle resourceBundle = ResourceBundle.getBundle("system");
        LOG_DIR_PATH = resourceBundle.getString("logDirPath");
    }

    /**
     * 写入日志
     *
     * @param message
     */
    public static final void writeLine(String message) {
        try {
            if (StringUtils.isNotBlank(message)) {

                File logDir = new File(LOG_DIR_PATH);
                if (!logDir.exists()) {
                    logDir.mkdirs();
                }
                SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                String logName = simpleDateFormat1.format(new Date());
                String messageHead = simpleDateFormat2.format(new Date());

                File logFile = new File(logDir, logName + ".log");
                FileWriter fileWriter = new FileWriter(logFile, true);
                fileWriter.write(messageHead + ":" + message + "\r\n");
                fileWriter.flush();
                fileWriter.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import utils.LogWmxUtils;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("2018 China");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }
    public static void main(String[] args) {
        LogWmxUtils.writeLine("Application startup");
        launch(args);
    }
}

打包 exe

经过了上面的javafxpackager打包之后,这里就更加简单了

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第8张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第9张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第10张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第11张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第12张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第13张图片

这和使用javafxpackager打包基本一样,同样IDEA会先将应用打包成可执行Jar文件,如下所示的"USA.jar",在通过它来进行转换,真正需要的在"bundles"目录中

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第14张图片

下面的"USA"目录才是真正需要的东西,可以拷贝到任何安装了Java环境的电脑上运行

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第15张图片

运行测试

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第16张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第17张图片

资源文件位置

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第18张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第19张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第20张图片

IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序_第21张图片

 

你可能感兴趣的:(IDEA_WebStorm)