目录
本文导读
javafxpackager
简 述
jar 转 exe
运行测试
注意事项
IDEA 自动生成
项目代码
打包 exe
运行测试
资源文件位置
1、很多时候把应用打包成可执行Jar文件,还是美中不足,因为整个应用被生成了一个 jar 文件
2、可以把Jar再转成exe应用,本文讲解两种方式
1、从 JDK1.7u6 开始 Java FX 内置在Java SE中,同时为Javafx 提供了打包工具-javafxpackager.exe,如下所示。
2、这是推荐方式
3、此种方式适用于任何可执行Jar应用,包括Java SE 与Java FX,也无论是IDEA生成的,还是Eclipse、MyEclipse生成的,或是其它方式生成的
1、以《IDEA 打包 可执行 Jar 程序》中 "Java SE应用"打包生成后的"china.jar"为例继续进行转换为exe应用
2、如下所示,现在china.jar可以放到任何安装了Java 运行环境的电脑上运行了,现在开始将它转为exe应用。
3、新建"jar"、"exe"两个目录,名字自己取,建议不含中文和空格就行,将"china.jar"放入到"jar"目录中
使用命令行:javafxpackager -deploy -native image -appclass com.lct.main.MainApp -srcdir E:/wmx/logs/jar -outdir E:/wmx/logs/exe -outfile chinaApp -name china
参数详解,可以直接在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"目录中
需要的就是这个"china"目录,转换好的exe应用就在里面,可以将"china"放到任何安装了Java运行环境的电脑上运行
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,然后重新编译即可。
1、IDEA可以将Java Web项目直接转成war包,可以将Java SE 直接转成 Jar包,同理 IDEA 可以直接将Java FX转成exe应用
2、以《IDEA 打包 可执行 Jar 程序》中 "Java FX应用"继续进行讲解说明
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);
}
}
经过了上面的javafxpackager打包之后,这里就更加简单了
这和使用javafxpackager打包基本一样,同样IDEA会先将应用打包成可执行Jar文件,如下所示的"USA.jar",在通过它来进行转换,真正需要的在"bundles"目录中
下面的"USA"目录才是真正需要的东西,可以拷贝到任何安装了Java环境的电脑上运行