【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
3 / 3
To page
avatar
Lotuso
deepin
2018-08-23 07:16
#41
最近在研究fx
Reply View the author
avatar
Lotuso
deepin
2018-08-23 08:30
#42
奇怪,我照着你的代码整的,也生成了deb安装后就是运行不起来
Reply View the author
avatar
翻过山峰看见云
deepin
2018-08-23 19:43
#43
https://bbs.deepin.org/post/150851
我怎么一打包就报错呢
Information:18-8-22 下午6:17 - Compilation completed with 2 errors and 0 warnin ...

我打包时候跟你一样的报错信息,一直没解决,你的解决了吗
Reply View the author
avatar
海天鹰
deepin
2018-08-23 21:03
#44
挺厉害的
Reply View the author
avatar
185******32
deepin
2018-08-23 22:05
#45
https://bbs.deepin.org/post/150851
如果用javafx 怎么把界面风格做得和deepin一样?

这才是重点. 哈哈. 任何语言都可以开发GUI程序. 你用java如何使用Deepin的API? 如何使用deepin的UI风格?
Reply View the author
avatar
youyou_2608
deepin
2018-08-24 06:20
#46
https://bbs.deepin.org/post/150851
哇,javaFx,上学期大作业就是用这个写的,当时边写边查,国内资料少的一批,而且怎么觉得都是在唱衰它?? ...

IDEA可以装一个JavaFX Scene Builder的工具,也可以可视化编辑界面,在win上用过,不确定支不支持linux
Reply View the author
avatar
14******70@qq.com
deepin
2018-08-25 03:54
#47
支持楼主
Reply View the author
avatar
MaxBill
deepin
2018-09-02 06:44
#48
https://bbs.deepin.org/post/150851
我打包时候跟你一样的报错信息,一直没解决,你的解决了吗

安装fakeroot就好了
Reply View the author
avatar
翻过山峰看见云
deepin
2018-09-03 22:44
#49
https://bbs.deepin.org/post/150851
安装fakeroot就好了

这个包装了是1.22-2版本,可还是一样的报错
Reply View the author
avatar
sz******iy@vip.qq.com
deepin
2018-11-16 04:50
#50
https://bbs.deepin.org/post/150851
IDEA可以装一个JavaFX Scene Builder的工具,也可以可视化编辑界面,在win上用过,不确定支不支持linux ...

是支持的,写 javafx 的话,idea 的体验没有 netbeans 好。
Reply View the author
3 / 3
To page