打包JavaFX11桌面应用程序

打包JavaFX11桌面应用程序

这是JavaFX系列的第二弹,第一弹在这里

在第一弹中,我们使用的是OpenJDK8,但是OpenJDK8和Oracle Java JDK不一样,它没有内置JavaFX模块,需要自己引入,而使用Oracle版的JDK直接import就好了。但是到了java11的时候无论是OpenJDK还是Oracle版都已经把JavaFX剥离开来了,javaFX现在由OpenJFX项目维护和更新。

第一弹中我使用的是OpenJDK8,后来想想,还是要顺应时代发展潮流,所以在这里转为使用OpenJDK11了,但是这对JavaFX技术的使用应该是没有区别的。

我们现在面对的主要问题是不能用Paxkager打包项目,原因是packager被从JFX11中除去了,咱也不知道为什么要这么干。但是我们如果要发布一个Java桌面程序的话,打包是必不可少的。我们在这里可以使用maven打包。这里我们以一个实例项目做说明:

  1. 在IDEA中创建一个JavaFX项目
  2. 用screenbuilder稍微修改一下、创建一个页面样式,这样等程序执行的时候好看效果

  3. 为项目添加Maven框架支持

    [](https://imgchr.com/i/MDgk8g)

  4. 因为我们使用的OpenJDK11没有JavaFX,我们使用maven进行openjfx包的安装和管理
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-controls</artifactId>
                <version>13</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-fxml</artifactId>
                <version>13</version>
            </dependency>
  5. 我的项目中还涉及到了一个ojdbc7,这个包说来有趣,maven repository中有这个包,但是它不在maven的中央仓库中,所以直接把maven repository里的dependency拷贝进来是不行的。我们可以进行手动安装到maven本地仓库:首先下载ojdbc7的jar包,然后执行命令:
    mvn install:install-file -Dfile=D:/ojdbc7-12.1.0.2.jar  -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2  -Dpackaging=jar

    然后就可以将maven repository里的内容粘贴到dependencies里了,注意groupId、artifactId、version要和命令中的保持一致。

  6. 然后我们点击run,会爆出一个错误:Error:java: 错误: 不支持发行版本 5。这需要我们在pom文件中配置一下java版本以及源码和目标代码的版本:
    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <java.version>11</java.version>
        </properties>

    这一段加在version标签后面就好

    然后调整一下IDEA的配置:Settings->Build->Compiler->Java Compiler->Target bytecode version,将其改为8

    然后再运行,发现又报错了:Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x630188e7) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x630188e7。关于这个错误,有位博主在博客中已经解决了:解决方法就是单独再写一个启动类AppMain:

    package sample;
    
    import javafx.application.Application;
    
    public class AppMain {
        public static void main(String[] args) {
            Application.launch(Main.class,args);
        }
    }

    然后就可以成功运行了

  7. 其实现在已经可以使用maven来build了,在IDEA的Termial中输入mvn clean install,我们就可以看到生成了target目录,里面就有一个jar包。但是这个jar包很小啊,而且点击也不能直接运行。这是因为maven默认的build方法并没有把依赖包打进去,而我们的目标是创建一个桌面应用程序,是需要一个包含依赖的jar包的。解决办法就是不使用maven默认的打包方法,有关这个可以见这篇博文.我们在这里使用的是maven-assembly-plugin的打包方法:
  8. 这里我们要修改maven的pom.xml配置页面中Build的方法,在刚才的dependencies之后加上以下的内容:
    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.2.0</version>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <!-- 绑定到package生命周期 -->
                            <phase>package</phase>
                            <goals>
                                <!-- 只运行一次 -->
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>sample.AppMain</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
                </plugins>
        </build>
  9. 然后我们继续执行mvn clean install就可以看到在生成的target目录下有了一个很大的jar包,大概几MB吧。
  10. 打开终端,输入chomd 777 xxx.jar(xxx是jar包的名字),然后就可以点击运行了

原文地址:https://www.cnblogs.com/jiading/p/11875889.html

时间: 2024-10-12 00:47:03

打包JavaFX11桌面应用程序的相关文章

将现有vue项目基于electron打包成桌面应用程序

一.前言 项目本来打算采用B/S架构去做的,只是在"人群中多看了你一眼",便直接撸了. 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目打包好后打开index.html能显示网页.因为刚接触便直接拿官方demo进行打包了. 1.克隆官方demo:git clone https://github.com/electron/electron-quick-start 2.cd electron-quick-start-&g

C#—使用InstallerProjects打包桌面应用程序

前言 打包桌面应用程序实在是一个不常使用的东西,偶尔使用起来经常会忘东忘西的耽误时间,因此,这篇文章多以图片记录过程,也是用于备忘. 下载打包工具 C#打包桌面应用程序有很多种方法,这里介绍一种使用Microsoft Visual Studio Installer Projects工具打包的方法. 首先,我们先创建一个Windows桌面应用,如图: 接下来我们选择工具,点击扩展和更新,如图: 然后我们得到界面如下,如图: 界面默认显示的是已安装的内容,我们仔细看下内容,会发现,这里都是我们已经安

Electron 构建桌面应用程序开发资料整理

Electron 是什么? Electron 是一个程序库,基于Electron库我们可以使用HTML.CSS.JS来开发跨平台桌面应用程序(building cross-platform desktop applications with HTML, CSS, and JavaScript.) 学习资源  Electron 官网文档  https://electron.atom.io/docs/ Electron 实现原理 ? Electron 结合了 Chromium 开源浏览器和带有一系列

Electron把网页打包成桌面应用并进行源码加密

前言 最近想把自己用html+css+js做的网页界面打包成桌面应用,网上一搜,发现Electron是一个不错的选择,试了试,发现效果真的不错.这里记录一下打包过程以作记录,便于自己以后查看学习. 一.简介 Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的. 二.打包过程 1.

【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】

[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. 2.qt程序打包. 3.将打包后的qt程序做成单个文件. [正文] 1.给qt程序添加一个图标: 首先确定程序可以正常编译,运行. 然后在项目代码目录下放一个xxx.ico文件,图片不要太大32*32刚好. 再然后打开项目的.pro文件,在里面加入RC_ICONS = xxx.ico. 最后编译程

适用于Windows桌面应用程序的.NET Core 3

介绍 9月,微软发布了新版.NET Core,用于构建Windows桌面应用程序,包括WPF和Windows Forms.从那时起开发人员可以将传统的nfx桌面应用程序(和控件库)迁移到.NET Core.一般使用WPF和Windows Forms开发的业务范围包括: UI密集数据形式(FOD)应用程序 响应式低延迟UI 需要脱机/断开连接运行的应用程序 依赖于自定义设备驱动程序的应用程序 这只是.NET Core上Windows应用程序开发的开始.继续阅读以了解有关.NET Core对构建Wi

桌面透明窗口程序渲染

市面上基本所有的3D游戏都依赖一个普通的windows窗口,包含标题栏.边框.最小化.最大化.关闭按钮.窗口的大小决定了玩家可视的游戏空间,整个窗口的像素都被游戏内容填充满,窗口背景不是透明的.渲染时,只要创建一个主渲染缓冲区,将各元素渲染在上面,再显示就可以了. 本文介绍一种方法,窗口的背景是透明的,窗口中只渲染主要的游戏元素,比如主角,而windows桌面就是舞台,你可以看到你的角色在桌面上奔跑,还可以用鼠标与它交互,如图: 采用类似技术的游戏有"哈姆宝宝"."宠物王国&

用node-webkit把web应用打包成桌面应用

node-webkit是一个Chromium和node.js上的结合体,通过它我们可以把建立在chrome浏览器和node.js上的web应用打包成桌面应用,而且还可以跨平台的哦.很显然比起传统的桌面应用,在某些特定领域用html5+css3+js开发的web应用更加简单和高效,而且还可以使用node.js的功能,所以node-webkit还是很有用处的. 下面我通过一个简单的demo来介绍怎么样把一个web应用打包成一个可执行文件(这里只介绍windows环境) 首先新建一个index.htm

PHP-GTK 扩展(用PHP编写桌面应用程序)

PHP能做什么? PHP-GTK (构建桌面应用程序在PHP中使用PHP-GTK) 普及一下知识php如何做桌面客户端 [PHP技术]PHP开发Windows桌面应用程序实例 实战PHP/GTK 哪位大神有经验的分享一下呗.资料看起来还是有点晕啊!还没有时间去实践.