【Java造轮子】1. 使用JavaFx开发并打包Deepin本地应用
Tofloor
poster avatar
chenjazz
deepin
2017-12-29 21:54
Author
本帖最后由 chenjazz 于 2017-12-30 21:34 编辑

想给Deepin造轮子,奈何没有学过C++,Qt等,所以查了一些相关资料,原来使用Java也可以生成deb安装包(感觉论坛里Java程序员还是不少吧!)
这样的好处就是对方电脑【不用安装java虚拟机】也可以直接运行java程序!

主要是基于 oracle-jdk8 的 javafxpackager 命令,注意一定是oracle jdk,因为它直接包含了javafx相关组件,推荐使用 sdkman 安装jdk,简单方便!

开发之前确保安装了fakeroot命令,如果没有的话可以使用 sudo apt install fakeroot 安装。

======================使用IDEA=================================================

这里我说只下使用IDEA开发(当然你也可以使用eclipse等其他IDE甚至是javafxpackager命令行)。

1.新建一个普通的java工程,我命名为deepinApp


工程目录如下


2. 在src下新建MainApp主类,并继承自javafx.application.Application
  1. import javafx.application.Application;
  2. import javafx.stage.Stage;

  3. public class MainApp extends Application {
  4.   @Override
  5.   public void start(Stage primaryStage) {

  6.   }

  7.   public static void main(String[] args) {
  8.       launch(args);
  9.   }
  10. }
Copy the Code

然后随便添加一些代码,这里是选择一个文件并获取绝对路径
  1. import javafx.application.Application;
  2. import javafx.scene.Scene;
  3. import javafx.scene.control.Button;
  4. import javafx.scene.control.TextField;
  5. import javafx.scene.layout.BorderPane;
  6. import javafx.stage.FileChooser;
  7. import javafx.stage.Stage;

  8. import java.io.File;

  9. public class MainApp extends Application {
  10.   @Override
  11.   public void start(Stage primaryStage) {
  12.     BorderPane border = new BorderPane();

  13.     TextField text = new TextField();
  14.     border.setTop(text);

  15.     Button button = new Button("点我");
  16.     FileChooser chooser = new FileChooser();
  17.     button.setOnMouseClicked(event -> {
  18.       File file = chooser.showOpenDialog(primaryStage);
  19.       if (file != null) {
  20.         text.setText(file.getAbsolutePath());
  21.       }
  22.     });
  23.     border.setCenter(button);

  24.     Scene scene = new Scene(border, 400, 400);

  25.     primaryStage.setScene(scene);
  26.     primaryStage.setTitle("获取文件的绝对路径");
  27.   
  28.     primaryStage.show();
  29.   }

  30.   public static void main(String[] args) {
  31.     launch(args);
  32.   }
  33. }
Copy the Code

3.配置生成策略
菜单----File----Project Structure----Artifacts ----加号,如下


建好后然后切换到Java FX选项卡,填写一些必要的选项 :),点击OK


4. 生成deb
菜单--- Build- -- Build ArtFacts --- Build或者ReBuild
等会就在根目录下out/artifacts/deepinApp/bundles目录下可以看见生成的deb了




=========================================安装deb===================================
查看刚才生成的deb,大小为52.2MB,主要是包含了jvm的运行环境(其实使用jdk9的jlink会更小,以后我会讲到)
本地安装:
  1. sudo dpkg -i deepinapp-1.0.deb
Copy the Code

安装好后在启动器中就可以看到了(由于没有设置icon,现在还比较丑),点击运行:
==本来想录屏,但是我的录屏坏了,录下来只有800k,打不开:




在深度系统管理其中:


卸载:不知道为什么,直接使用启动器中右键卸载会失败(谁能告诉我为什么?)使用命令行卸载:
  1. sudo apt remove deepinapp
Copy the Code










Reply Favorite View the author
All Replies
2 / 3
To page
avatar
176******80
deepin
2017-12-30 22:52
#21
openjdk也有javafxpackager,只不过不是默认包含在openjdk里的,单独拆了个包叫openjfx
Reply View the author
avatar
要讲武德
deepin
2017-12-30 23:25
#22
厉害了 , 只会Java web路过.....
Reply View the author
Comments
jiuxian
2018-01-01 17:23
会javaweb的学javafx很简单,渲染机制都是跟html5的canvas学的
avatar
要讲武德
deepin
2017-12-30 23:29
#23
https://bbs.deepin.org/post/150851
厉害了 , 只会Java web路过.....

我先收藏一波, Mark
Reply View the author
avatar
panther_puma
deepin
2017-12-30 23:33
#24
javafx的性能感觉不太行,现在还用这个做UI吗
Reply View the author
avatar
chenjazz
deepin
2017-12-31 04:27
#25
qq379377944 发表于 2017-12-30 14:52
openjdk也有javafxpackager,只不过不是默认包含在openjdk里的,单独拆了个包叫openjfx ...

是这样的。
Reply View the author
avatar
chenjazz
deepin
2017-12-31 04:34
#26
qq379377944 发表于 2017-12-30 14:49
Kotlin基于JavaFx封装的TornadoFX写起来很爽

好的,我关注下这个~
Reply View the author
avatar
chenjazz
deepin
2017-12-31 04:35
#27
panther_puma 发表于 2017-12-30 15:33
javafx的性能感觉不太行,现在还用这个做UI吗

可以做,但是会的人很少,我也是初学
Reply View the author
avatar
chenjazz
deepin
2017-12-31 04:37
#28
licardo 发表于 2017-12-30 15:25
厉害了 , 只会Java web路过.....

握个手,我也是做javaweb的,这个前几天刚研究~( ̄▽ ̄~)~准备下篇写java9的
Reply View the author
avatar
chenjazz
deepin
2017-12-31 05:32
#29
https://bbs.deepin.org/post/150851
喜欢javafx,在deepin上面很好用

我是初学者,多指教哈
Reply View the author
avatar
doge-linux
deepin
2017-12-31 06:29
#30
不评论 FX 嘿嘿
Reply View the author
avatar
chenjazz
deepin
2017-12-31 16:28
#31
doge-linux 发表于 2017-12-30 22:29
不评论 FX 嘿嘿

哦,好的
Reply View the author
avatar
153******56
deepin
2017-12-31 16:41
#32
好贴,顶
Reply View the author
avatar
chenjazz
deepin
2018-01-01 04:00
#33
hanshenzhi 发表于 2017-12-31 08:41
好贴,顶

谢谢
Reply View the author
avatar
176******80
deepin
2018-01-01 04:45
#34
送上一个利器,JavaFX的Gradle插件,该作者同时也维护了Maven版的

https://github.com/FibreFoX/javafx-gradle-plugin
Reply View the author
avatar
chenjazz
deepin
2018-01-01 16:52
#35
qq379377944 发表于 2017-12-31 20:45
送上一个利器,JavaFX的Gradle插件,该作者同时也维护了Maven版的

https://github.com/FibreFoX/javafx-gr ...

谢谢,maven的那个插件在用了,gradle还没用过。请问你用过jdk9的maven jlink,jmod插件吗?我安装后运行失败,这两个插件maven官方显示是alpha版的,还没有教程。还没来得及看源码。
Reply View the author
avatar
176******80
deepin
2018-01-02 00:33
#36
https://bbs.deepin.org/post/150851
谢谢,maven的那个插件在用了,gradle还没用过。请问你用过jdk9的maven jlink,jmod插件吗?我安装后运行 ...

Maven是一个比较经典的工具,相比Gradle保守多了,Java9不是一个长期支持版,Maven的一些插件可能没有Gradle活跃,建议找Gradle插件使用,并且Gradle扩展功能十分简单,自定义task就好了
Reply View the author
avatar
1***2@qq.com
deepin
2018-01-02 01:03
#37
这个可以有,赞赞赞赞赞~
Reply View the author
avatar
chenjazz
deepin
2018-01-02 01:55
#38
qq379377944 发表于 2018-1-1 16:33
Maven是一个比较经典的工具,相比Gradle保守多了,Java9不是一个长期支持版,Maven的一些插件可能没有Gra ...

两个都用过,因为我是做web的,自定义需求比较少,用maven比gradle编译速度快多了,gradle那叫一个慢
Reply View the author
avatar
Ligocut光剪视频剪辑软件
deepin
Backbone of ecological co-construction group
2018-08-10 07:48
#39
希望楼主还能多出一点javafx的实例
Reply View the author
avatar
MaxBill
deepin
2018-08-23 02:19
#40
我怎么一打包就报错呢
Information:18-8-22 下午6:17 - Compilation completed with 2 errors and 0 warnings in 7s 555ms
Error:Java FX Packager: Picked up _JAVA_OPTIONS:
BUILD FAILED
/home/shuai/.IntelliJIdea2018.1/system/compile-server/deepinapp_a91f2b1d/_temp_/build.xml:29: 错误: 打包程序 "DEB 安装程序" (deb) 无法生成包。
Total time: 5 seconds
Error:Java FX Packager: fx:deploy task has failed.
Reply View the author
2 / 3
To page