前段时间学习使用TornadoFx一个kotlin版的javaFx框架开发了一个应用,完成后,第一次遇到打包jar文件(之前一直写JS前端和PHP后端,从来没用过java),心累啊,然后就是打包成为EXE格式的程序。

这篇文章只做打包的记录,至于TornadoFx的开发笔记,有空会放上来(还有使用Jfoenix一个fx的质感设计库)。

上个图看看。用的Jfoenix库(其中涉及到kotlin调用有点小问题,不过大部分正常使用)。

Android kotlin 点击放大图片 kotlin桌面应用_主函数

 其中涉及到各种基本组件与高级组件,属性绑定,表格渲染,REST接口请求。

下面看看项目结构:kotlin为原生代码,resources为资源文件,kotlin里面默认资源访问路径就是这里。

JavaFx可以使用FXML编写界面,TornadoFx也可以,但是kotlin1的DSL得到了很大的利用,写起来很棒,就没有用FXML写页面了。全部使用DSL编写。

Android kotlin 点击放大图片 kotlin桌面应用_java_02

一点布局代码

val header = StackPane().apply {
            vbox {
                alignment = Pos.CENTER
                label("图书馆查询·外网版"){
                    textFill = Color.WHITE

                }
                label {
                    textFill = Color.WHITE
                    text = "图书数据不完整,更多请使用校内版!"
                }
                flowpane {
                    hgap = 5.0
                    vgap = 5.0
                    paddingAll = 10.0
                    //spacing = 10.0
                    this += myButton("设计")
                    this += myButton("营销")
                    this += myButton("公司")
                    this += myButton("商业")
                    this += myButton("机械")
                    this += myButton("高数")

                    this += myButton("JAVA")
                    this += myButton("Cad")
                    this += myButton("Android")
                    this += myButton("Max")
                    this += myButton("Python")
                    this += myButton("PhotoShop")

                }
            }
            style {
                backgroundColor += c("#4d4d4d")
                VBox.setVgrow(this@apply, Priority.ALWAYS)
            }
        }

 进入正题:打包项目

1:找到Structure,添加Artifacts:选择JAR-From moudule

Android kotlin 点击放大图片 kotlin桌面应用_java_03

 

2:接下来是关键:主类,你可以选择默认的,他会帮你搜索项目的主类,你可能会有两个主类出现在选择中,一个是fx项目主类,一个是main函数顶级主函数(这个在IDE中效果不大,但是后面打包EXE有用!),这里你选择项目主类就可以了,顶级主函数是以xxKt.kt结尾的函数,这是TornadoFx自动处理的!

还有就是:MANIFEST文件的位位置,如果不正确,打包后,运行会出现:找不到清单文件,把路径改为图2 src后面的删除!

添加完后,依赖会自动被打包,但是资源文件不会,你需要添加资源文件resources到打包。

Android kotlin 点击放大图片 kotlin桌面应用_资源文件_04

Android kotlin 点击放大图片 kotlin桌面应用_java_05

 接下来:点击 build 

Android kotlin 点击放大图片 kotlin桌面应用_java_06

 3:完成后:out目录

Android kotlin 点击放大图片 kotlin桌面应用_主函数_07

 jar文件是我们打包完成的,你可以直接运行它,如果直接双击失败或者没反应,就使用命令行执行 java -jar TornadoDemo.jar 后出现报错信息,你就可以查错了。

到这里如果运行正常,就可以正常使用了,但是这个是jar文件,很多用户并没有安装JRE环境,怎么办呢还有很多用户都不知道JAR是可以直接运行的,在大多数普通用户眼里,EXE才是windows的正常应用,so,我们需要用到:EXE4J这个软件了,他可以打包JAR文件到EXE还能添加自带JRE(这不是必须,但是你想要的你的应用在所有设备运行,请带上它,或找个精简版的,因为它有点大。。。)

开始打包:

1.

Android kotlin 点击放大图片 kotlin桌面应用_主函数_08

2:

Android kotlin 点击放大图片 kotlin桌面应用_java_09

 

3:

Android kotlin 点击放大图片 kotlin桌面应用_java_10

 

4:你可以设置icon图标路径,并添加64余32位的支持,还要输出应用的名字

 

Android kotlin 点击放大图片 kotlin桌面应用_java_11

Android kotlin 点击放大图片 kotlin桌面应用_主函数_12

 

Android kotlin 点击放大图片 kotlin桌面应用_资源文件_13

5:

Android kotlin 点击放大图片 kotlin桌面应用_java_14

 

6:点击加号,添加我们刚开始导出的JAR文件。

Android kotlin 点击放大图片 kotlin桌面应用_java_15

 7:添加主函数:这一步很多人发现是空白,因为你没写主函数,而是直接使用IDE的运行来跑,IDE自动使用的Application方法。

Android kotlin 点击放大图片 kotlin桌面应用_主函数_16

IDE中Main函数

Android kotlin 点击放大图片 kotlin桌面应用_资源文件_17

8:选择运行的JRE版本,可以不填上限。

Android kotlin 点击放大图片 kotlin桌面应用_java_18

9:选择JRE:如果不使用默认的JRE寻找方式(就是根据系统变量去查找用户电脑JRE的位置),想把JRE直接打包进去,选择高级设置选择sequence添加自己的JRE注意是相对路径,把默认的删除!

Android kotlin 点击放大图片 kotlin桌面应用_java_19

Android kotlin 点击放大图片 kotlin桌面应用_主函数_20

10:选择客户端完成

Android kotlin 点击放大图片 kotlin桌面应用_java_21

Android kotlin 点击放大图片 kotlin桌面应用_java_22

 

好了。打包EXE完成。

关于使用TornadoFx,后续会记录,网上有很多都是跑个官方Demo基本没什么用,在编写这个应用,遇到了许许多多的问题,由于没有javaFx开发经验,遇到不少问题,虽然TornadoFx的文档说,没有fx经验不影响学习,但是还是需要去了解fx的基本原理比如:架构,stage与scene,属性绑定等,这在TornadoFx默认出现了。。。

 

后续会将这个项目放置GitHub,目前在完善。

 合个影:

Android kotlin 点击放大图片 kotlin桌面应用_主函数_23