打包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打包。这里我们以一个实例项目做说明:
在IDEA中创建一个JavaFX项目
用screenbuilder稍微修改一下、创建一个页面样式,这样等程序执行的时候好看效果
为项目添加Maven框架支持
因为我们使用的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>
我的项目中还涉及到了一个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要和命令中的保持一致。
然后我们点击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);
}
}
然后就可以成功运行了
其实现在已经可以使用maven来build了,在IDEA的Termial中输入mvn clean install,我们就可以看到生成了target目录,里面就有一个jar包。但是这个jar包很小啊,而且点击也不能直接运行。这是因为maven默认的build方法并没有把依赖包打进去,而我们的目标是创建一个桌面应用程序,是需要一个包含依赖的jar包的。解决办法就是不使用maven默认的打包方法,有关这个可以见这篇博文.我们在这里使用的是maven-assembly-plugin的打包方法:
这里我们要修改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>
然后我们继续执行
mvn clean install
就可以看到在生成的target目录下有了一个很大的jar包,大概几MB吧。打开终端,输入
chomd 777 xxx.jar
(xxx是jar包的名字),然后就可以点击运行了
打包JavaFX11桌面应用程序的更多相关文章
- 将现有vue项目基于electron打包成桌面应用程序
一.前言 项目本来打算采用B/S架构去做的,浏览器网址方式打开还是让用户不方便: 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目 ...
- electron打包成桌面应用程序的详细介绍
1.前提条件 a. 安装了node b.安装了electron c.你知道自己写的东西(js,css,html等等)放在那个文件夹(假设这个文件夹命名为 app,下面会用到)中 2.安装electro ...
- 使用node-webkit(v0.35.5)和innosetup(3.6.1)打包将web程序打包为桌面客户端(安装包)
这边主要是有一个客户,需要在电视机上安装一个客户端,含有视频直播功能:刚开始我们采用的webapp打包成apk安装在电视机上,发现摄像头监控画面根本无法播放(apk在手机上可以正常播放视频):排除一些 ...
- C#—使用InstallerProjects打包桌面应用程序
前言 打包桌面应用程序实在是一个不常使用的东西,偶尔使用起来经常会忘东忘西的耽误时间,因此,这篇文章多以图片记录过程,也是用于备忘. 下载打包工具 C#打包桌面应用程序有很多种方法,这里介绍一种使用M ...
- Electron打包H5网页为桌面运行程序
一.安装配置环境 Electron(一种桌面应用程序运行时),Electron 把 Chromium 和 Node 合并到一个单独的运行时里面,很适合开发桌面 web 形式的应用程序,通过Node它提 ...
- nodejs打包成桌面程序(exe)的进阶之路
nodejs打包成桌面程序(exe)的进阶之路 node js bat 前端 计划任务 前言:最近的研究,请大佬们细品 第一篇 - 任务计划程序篇 说真的研究到将nodejs打包成可执行的exe文件是 ...
- 将python项目打包为可运行的windows桌面exe程序
---恢复内容开始--- 步骤大概如下: 1.需要一个python文件/项目.也就是我们想要打包的文件 2.安装pyinstaller,目的是将我们的python文件生成为exe可执行程序. 3.使用 ...
- electron之Windows下使用 html js css 开发桌面应用程序
1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...
- nodejs+chromium 创建桌面应用程序
直接用nodejs+javascript+html+css也可以创建桌面应用程序啦,前端开发的同学应该都比较感兴趣. 生成的应用程序自带nodejs环境和chrome浏览器环境. github的ato ...
随机推荐
- MAC为Apache2服务器配置多个虚拟主机
Mac 下自带的 Apache 配置 2016年01月25日 00:25:03 阅读数:1292 参考: http://www.cnblogs.com/snandy/archive/2012/11/1 ...
- 解决“mysql不是内部/外部命令,也不是可执行程序,也不是批处理文件”
解决方案: 1.切换到mysql.exe文件所在目录: 2.将mysql.exe文件所在目录添加到操作系统内的环境变量中: 如何添加环境变量: 1.右击“我的电脑”——>属性——>高级—— ...
- 检查并解决CentOS 7 安装Tomcat是否成功
参考网址 https://blog.csdn.net/Blue_Sky_rain/article/details/91348791
- MySQL使用空事务解决slave从库errant问题
MySQL集群一般部署为主从架构,主库专门用于写入数据,从库用于读数据. 异常情况下,在从库上写入数据,就会出现主从数据不一致问题,称为errant. 如果从库上的这些数据主库上已经有了,或者主库不需 ...
- leetcode16 最接近的三数之和
做了几周的hard之后,这道题居然轻易就解出来了,稍微debug了一下就ac了,算是有了一丢丢提高把: 思路 这道题因为和三数之和很像,所以充分利用双指针的思想:先排序,然后再固定一个数i,i取值从[ ...
- LC 641. Design Circular Deque
Design your implementation of the circular double-ended queue (deque). Your implementation should su ...
- jdk与jre与jdk都是干什么的有什么区别和jvm详解:
1.0,jdk与jre和jvm的区别: JDK(Java Development Kit):指的是Java开发工具集.JDK是整个Java的核心,包括了Java基础类库.Java运行环境(JRE)和J ...
- ppt学习笔记
文档:ppt学习笔记.note链接:http://note.youdao.com/noteshare?id=719a525ca3420e3692b1025d5d904c02&sub=4E52E ...
- Rowlock、UPDLOCK
ROWLOCK 使用行级锁,而不使用粒度更粗的页级锁和表级锁. UPDLOCK 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束.UPDLOCK 的优点是允许您读取数据(不阻塞 ...
- Docker监控容器资源的占用情况
启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [root@localhost ~]# docker run --name os1 -it -m 1g --cp ...