【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
1 / 3
To page
avatar
158******55
deepin
2017-12-29 22:00
#1
赞一个!!!
Reply View the author
avatar
chenjazz
deepin
2017-12-29 22:16
#2

又更新了些
Reply View the author
avatar
chenjazz
deepin
2017-12-29 22:37
#3
推荐下javaFX中文学习网站  http://www.javafxchina.net/blog/docs/
Reply View the author
avatar
aName
deepin
2017-12-29 22:38
#4
稳,可以开工造轮子了
Reply View the author
avatar
chenjazz
deepin
2017-12-29 23:03
#5
https://bbs.deepin.org/post/150851
稳,可以开工造轮子了

哈哈,可以,不过还没想好做什么
Reply View the author
avatar
justforlxz
deepin
2017-12-29 23:06
#6
来一块写Minecraft forge mod。
Reply View the author
avatar
chenjazz
deepin
2017-12-29 23:11
#7
https://bbs.deepin.org/post/150851
来一块写Minecraft forge mod。

no,我要另起炉灶,哈哈!
Reply View the author
avatar
rekols
deepin
2017-12-29 23:31
#8
一个hello world占这么大内存。。。
Reply View the author
avatar
chenjazz
deepin
2017-12-29 23:38
#9
rekols 发表于 2017-12-29 15:31
一个hello world占这么大内存。。。

主要是java虚拟机哈,如果一个helloworld的100M,那么10倍的代码量可能是150M不到,他不会成倍增加,况且现在电脑内存用不完,留着也没用呀!(づ ●─● )づ
Reply View the author
avatar
iminto
deepin
2017-12-29 23:44
#10
我也是Java程序员,期待Java9 普及。

另外,用vala也不错,语法和Java比较接近,deepin上有些应用也用了vala。我这里有个例子 https://github.com/iminto/wallpaper
Reply View the author
avatar
chenjazz
deepin
2017-12-29 23:58
#11
https://bbs.deepin.org/post/150851
我也是Java程序员,期待Java9 普及。

另外,用vala也不错,语法和Java比较接近,deepin上有些应用也用了va ...

好的,已关注!
Reply View the author
avatar
pikachuhy
deepin
2017-12-30 00:09
#12
如果用javafx 怎么把界面风格做得和deepin一样?
Reply View the author
avatar
snowx
deepin
2017-12-30 00:39
#13
这就是java里面的开发包哇
Reply View the author
avatar
chenjazz
deepin
2017-12-30 01:53
#14
pikachuhy 发表于 2017-12-29 16:09
如果用javafx 怎么把界面风格做得和deepin一样?

我也是javafx的初学者
Reply View the author
avatar
chenjazz
deepin
2017-12-30 01:54
#15
snowx 发表于 2017-12-29 16:39
这就是java里面的开发包哇

是的,jdk8的
Reply View the author
avatar
chenjazz
deepin
2017-12-30 03:20
#16
下班了,放假了,明年见!祝大家新年快乐!
Reply View the author
avatar
sz******iy@vip.qq.com
deepin
2017-12-30 03:55
#17
哇,javaFx,上学期大作业就是用这个写的,当时边写边查,国内资料少的一批,而且怎么觉得都是在唱衰它???而且8之前都不是自带。当时用netbeans写,感觉画界面的时候比IDEA的好用。
Reply View the author
avatar
chenjazz
deepin
2017-12-30 04:51
#18
plmnhy 发表于 2017-12-29 19:55
哇,javaFx,上学期大作业就是用这个写的,当时边写边查,国内资料少的一批,而且怎么觉得都是在唱衰它?? ...

现在桌面应用没什么市场,都去做web了。只能说javaFx生不逢时。
Reply View the author
avatar
Ligocut光剪视频剪辑软件
deepin
Backbone of ecological co-construction group
2017-12-30 21:09
#19
喜欢javafx,在deepin上面很好用
Reply View the author
avatar
176******80
deepin
2017-12-30 22:49
#20
Kotlin基于JavaFx封装的TornadoFX写起来很爽
Reply View the author
1 / 3
To page