赞
踩
目录
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环境的电脑上运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。