Java技术

  • 给SpringBoot Web应用配上JavaFx漂亮衣服
    • SpringBoot
    • 上代码
    • 小结

给SpringBoot Web应用配上JavaFx漂亮衣服

提到Java开发的Web程序,第一印象就是一个黑色的窗口,里面滚动着杂乱的信息。对于服务器应用来说,无所谓这一点。如果你的应用需要发布到桌面,你就需要好好地考虑这一点了。有了JavaFX,可以帮你克服用户的恐怖心理。

SpringBoot

SpringBoot结合JavaFX,可以使得我们在JavaFx程序中采用Spring才提供的IOC、注解等特性。但是,众所周知,SpringBoot有一个较长的启动过程和启动时间,影响用户的体验。可否先展示程序的主界面,在界面加载后在运行SpringBoot。于是,最好先启动JavaFx,然后在JavaFx的初始化过程中,在另一个线程中启动SpringBoot。

上代码

// 图形模式启动
public class GuiConsoleApplication extends Application {private static Logger logger = LoggerFactory.getLogger(GuiConsoleApplication.class);private static String[] savedArgs = null;private static ConfigurableApplicationContext applicationContext = null;public static void main(String[] args) {savedArgs = args;Application.launch(GuiConsoleApplication.class, args);}public void init() throws Exception {CompletableFuture.supplyAsync(() -> Db2webApplication.run(savedArgs)).whenComplete((ctx, throwable) -> {if (throwable != null) {logger.error("Failed to load spring application context: ", throwable);Platform.runLater(() -> {showErrorAlert(throwable);});} else {Platform.runLater(() -> {applicationContext = ctx;});}});}@Overridepublic void start(Stage stage) throws Exception {FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/consoleView.fxml"));Parent root = loader.load();// FxMainPageController controller = loader.getController();Scene scene = new Scene(root);scene.getStylesheets().add(getClass().getResource("/views/consoleView.css").toExternalForm());stage.setTitle("数据转Web服务");stage.getIcons().add(new Image("/images/console.ico"));stage.setScene(scene);stage.setResizable(false);
//        stage.initStyle(StageStyle.UNDECORATED);
//        stage.setOnShown((event) -> {//            ConsoleApplication.doUpdate(pathname);
//        });stage.setOnCloseRequest((event) -> System.exit(0));stage.show();}public static void relaunch() {Platform.runLater(() -> {try {// 关闭ApplicationContextif (applicationContext != null) {applicationContext.close();}Application.launch(GuiConsoleApplication.class, savedArgs);} catch (Exception e) {logger.error(e.getMessage());}});}private static void showErrorAlert(Throwable throwable) {Alert alert = new Alert(Alert.AlertType.ERROR, "Fatal error occurred.The application will exit now.Error: \n\n" + throwable.getMessage(), new ButtonType[0]);alert.showAndWait().ifPresent((response) -> {Platform.exit();});}
}

小结

不同于springboot-javafx-support技术,我们仅仅需要的是将SpringBoot Web应用表现为一个普通的本地应用程序。这里将JavaFX图形界面与SpringBoot Web服务结合在一起,且避开SpringBoot启动过程。配合Exe4j等工具,就具备了将Java Web应用作为本地应用程序部署和使用的能力,便于初级用户使用。
一般来说,这里的图形界面主要是监控和管理SpringBoot服务功能,为普通用户提供一个易操作、易控制的服务应用。

给SpringBoot Web应用配上JavaFx漂亮衣服相关推荐

  1. php实现视频中合成文字,几个视频合并 把照片也加进去 然后配上文字?

    2017-04-17 逛逛 14:17:17 你好 逛逛 14:17:18 在么 逛逛 14:17:53 我是想把手机里的视频剪辑成一个大d 逛逛 14:17:57 需要买咱们的软件吗 逛逛 14:1 ...

  2. springboot+web文件上传和下载

    一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...

  3. springboot 设置默认访问index.html_【SpringBoot WEB系列】WebFlux静态资源配置与访问

    [SpringBoot WEB系列]WebFlux静态资源配置与访问 上一篇博文介绍SpringMVC的静态资源访问,那么在WebFlux中,静态资源的访问姿势是否一致呢 I. 默认配置 与Sprin ...

  4. SpringBoot WEB 核心原理

    学习SpringBoot WEB部分我们有几个疑问,如下: 1 SpringBoot如何实现默认使用Tomcat作为servlet容器的? 2 如何配置jetty作为servlet容器? 3 Spri ...

  5. Springboot Web应用中服务器配置参数ServerProperties的加载

    #概述 Springboot配置文件中以server开头的项表示服务器的配置参数,这一点从字面意义即可直观理解,这些参数,包括端口,路径设置,SSL配置参数等等.具体有哪些参数,从源代码的角度上,可以 ...

  6. SpringBoot整合Shiro学习(上)

    SpringBoot整合Shiro(上) 基于[编程不良人]2020最新版Shiro教程,整合SpringBoot项目实战教程 哔哩哔哩链接:https://www.bilibili.com/vide ...

  7. 视频教程-SpringBoot Web项目案例视频课程-Java

    SpringBoot Web项目案例视频课程 拥有10余年项目实战经验. 2006-2011在nttdata从事对日软件开发类工作. 2011-2015在HP从事技术服务工作. 擅长于j2ee相关的软 ...

  8. springboot嵌入tomcat文件上传,虚拟路径配置

    场景: 如果是独立的tomcat,我们直接将文件上传到tomcat的web路径下即可进行访问 对于springboot内嵌的tomcat,当我们启动jar包时,不可能将文件上传到tomcat路径下,这 ...

  9. 【阿里云生活物联网架构师专题 ⑧】基于在 SpringBoot Java私有云上接收阿里云物联网设备的各种状态数据,实现m2m流转;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

最新文章

  1. 开源软硬一体OpenCV AI Kit(OAK)
  2. 测试Animation大型动画文件拆分播放的可行性
  3. 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
  4. 你有哪些deep learning(rnn、cnn)调参的经验
  5. 视觉激光融合——VLOAM / LIMO算法解析
  6. 中南民族大学计算机类有什么具体专业,中南民族大学计算机科学学院计算机科学与技术专业简介...
  7. Python File 介绍
  8. 第1课 编程是一门技术_动动脑 第1题
  9. jquery 自动完成 Autocomplete
  10. java 树最大距离_寻找二叉树最远的叶子结点(实例讲解)
  11. 基于单片机的电子秤系统设计(电路+流程)
  12. 软件测试验收方法_验收测试是美丽的魔术。 这就是它可以改善您的生活的方法。...
  13. Base64的编码与解码的实现方法(超详细,每一行代码都含注释)
  14. 漫谈程序员系列 软件开发的十八般乐趣
  15. python+微信+腾讯智能闲聊
  16. python识别文字软件_【Python 教程】使用 Python 和大漠插件进行文字识别
  17. 【系统设计】系统设计基础:速率限制器
  18. X86 将死?RISC-V 正当立
  19. 随机生成1万个随机姓名与密码存入txt文本中
  20. Succ(x),Pred(X),inc(x,i),dec(x,i)

热门文章

  1. uniapp 本地相册选择图片
  2. 语法转换_【语法专题】句型转换(下)
  3. 微信去除 防欺诈或盗号请不要输入qq密码 的方法
  4. 高数学习日记——矢量场与数量场的概念
  5. 电脑有网但打不开网页怎么办?
  6. 大数据毕设选题 - 机器学习餐厅销量预测(大数据 python)
  7. 山东田野稻花香 国稻种芯·中国水稻节:威海荣成引种的旱稻
  8. SQL13 从titles表获取按照title进行分组
  9. Windows 11 有望支持苹果 M1 Mac?微软和高通的秘密协议即将到期
  10. python中true什么意思_python中的bool是什么意思