Java如何开发PC客户端(Windows,Mac,Linux)

  • 项目编译工具:Gradle
  • 开发工具: Idea
  • 开发语言: 建议java17以上
  • ui组件:openjfx (org.openjfx.javafxplugin)
  • 打包工具: jpackage (org.beryx.jlink)

一、如何解决打包问题

java 14以后,有了jpackage工具,能够很方便的打包成exe,msi,dmg等包了。

如果有java环境的机器,可以使用launch4j进行打包(可以指定支持的运行时java环境版本min~max), 可参考maven插件https://github.com/orphan-oss/launch4j-maven-plugin,这种方式打的包体积很小,但是需要运行的系统安装了对应的jvm环境才好。jpackage更适合没有java环境的机器,可以运行在任何一台机器上。

试了Maven项目的javafx-maven-plugin插件,发现没法打包成可安装的包exe或者msi。

最终选择了gradle管理项目(打包插件:badass-jlink-plugin),如果有idea最新版的话,新建JavaFx、gradle的项目默认用的就是这个插件。不过要稍微改下配置。具体参数配置可以查看github: https://github.com/beryx/badass-jlink-plugin, readme里有介绍几个例子。我是参考这个例子https://github.com/beryx-gist/badass-jlink-example-log4j2-javafx进行的配置。也可以看看这个项目,挺不错的(地址 https://github.com/gleidsonmt/DashboardFx)。

plugins {id 'java'id 'application'id 'org.javamodularity.moduleplugin' version '1.8.12'id 'org.openjfx.javafxplugin' version '0.0.13'id 'org.beryx.jlink' version '2.25.0'
}group 'com.example'
version '1'repositories {mavenCentral()
}ext {junitVersion = '5.9.1'
}sourceCompatibility = '17'
targetCompatibility = '17'dependencies {implementation('org.apache.logging.log4j:log4j-core:2.11.1')testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}tasks.withType(JavaCompile) {options.encoding = 'UTF-8'
}application {mainModule = 'com.example.app'mainClass = 'com.example.app.Main'
}javafx {version = '17.0.2'modules = ['javafx.controls', 'javafx.fxml']
}dependencies {implementation('org.controlsfx:controlsfx:11.1.2')implementation('org.kordamp.bootstrapfx:bootstrapfx-core:0.4.0')testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}test {useJUnitPlatform()
}jlink {imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip")options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']launcher {//app名称name = 'TestAppName'}forceMerge('log4j-api','fastjson')jpackage {if (org.gradle.internal.os.OperatingSystem.current().windows) {
//            installerType = 'exe'installerOptions += ['--win-per-user-install', '--win-dir-chooser', '--win-menu', '--win-shortcut']
//            imageOptions += ['--win-console']}}}jlinkZip {group = 'distribution'
}

二、JavaFX开发(使用Scene Builder)

JavaFX是类似Android的开发模式,界面布局使用FXML,使用scene builder可以直接拖拽控件进行布局,可视化的布局。界面支持CSS调样式。支持ResourceBoundle,进行国际化设置。控件多,灵活,支持图表展示和WebView.

scene builder 怎么用?可以参考这篇文章https://blog.csdn.net/weixin_41571493/article/details/81415327,写的很详细。
scene builder下载地址 https://gluonhq.com/products/scene-builder/
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 运输层上 | 运输层概述 UDP协议 端口 套接字

文章目录 1 运输层概述1.1 运输层存在的意义1.2 运输层协议概述1.3 主要端口号 2 运输层主要协议 UDP2.1 UDP的特点2.2 UDP首部格式2.3 UDP工作流 1 运输层概述 1.1 运输层存在的意义 之前我们讲网络层的时候,已经可以将信息从一个主机传递到另一个主机了。 那么…

校园圈子交友系统,APP小程序H5,三端源码交付,支持二开!实名认证,大V认证,地图找伴,二手平台!

校园圈子交友系统,是属于自主定义开发的系统,内容有很多,先截取一些给大家看看,让大家更多的了解本系统,然后再做评价! 校园后端下载地址:校园圈子系统小程序,校园拼车,校…

XM平台官网开户注册流程图解

注册前准备 在进行XM外汇官网注册之前,首先需要准备必要的信息,包括个人身份信息、联系方式以及相关财务信息。确保这些信息的准确性是保证注册流程顺利进行的关键。 一、要访问XM外汇官方网站,首先打开您的浏览器。在浏览器的地址栏中输入…

数据分析基础之《numpy(6)—合并与分割》

了解即可,用panads 一、作用 实现数据的切分和合并,将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

华为OS与麒麟OS:华为自研操作系统的对决

导言 在移动操作系统领域,华为OS和麒麟OS代表了华为在自主研发方面的努力。本文将深入探讨这两个操作系统的特点、竞争关系以及它们在用户体验、生态系统建设等方面的差异。 1. 背景与起源 华为OS的诞生: 华为OS是华为公司为应对外部环境而自主…

英国呼叫中心的功能

随着互联网的普及和信息技术的发展,越来越多的企业需要通过呼叫中心来管理客户关系和提供售后服务。英国作为主要的海外外贸市场之一,也是呼叫中心面向客户服务的重要国家。 英国呼叫中心的功能 英国呼叫中心的功能大致分为四类:接听电话、…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表)

一、模型user对象>和数据库的字段关联 & 自动生成 【其中涉及删除表数据,一切又从零开始】 二、模型user对象>和数据库的字段关联 2.1在model文件夹下,新建 user对象 2.1.1 概念 大家可以想象我们现在的数据是存储在数据库里的&…

【Spring Security】打造安全无忧的Web应用--入门篇

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Spring Security是什么 1.概…

Spring Boot3通过GraalVM生成exe执行文件

一、安装GraalVM 1、官网:https://www.graalvm.org/downloads/ 2、配置环境变量 2.1、环境变量必须使用JAVA_HOME,否则会出现问题 2.2、在系统变量配置Path,%JAVA_HOME%\bin,注意必须放在顶部第一位 2.3、配置jdk的环境变量,在P…

【Spring实战】创建第一个项目

文章目录 使用 Spring Initializr 创建第一个项目1. 打开官网2. 填写信息3. 生成工程4. 解压工程5. 导入 IDEA6. 编写 Hello world7. 启动项目8. 访问验证9. 详细代码最后 Spring 是一个强大且广泛使用的 Java 开发框架,提供了全面的基础设施和工具,用于…

如何将图片转为PDF

问题描述:如何将图片转为PDF,有时需要将纸质文档扫描成PDF,然后上传到网上。 解决办法:平时使用的方法是将图片插入到word文件中,然后将图片设置为浮于文字下方,然后调整图片的大小,铺满整个wo…

案例094:基于微信小程序的图书馆自习室座位预约管理系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

mysql:查看线程缓存中的线程数量

使用命令show global status like Threads_cached;可以查看线程缓存中的线程数量。 例如,查询线程缓存中的线程数量如下: 然后启动应用程序,使用连接,查询如下: 由查询结果可以看到,线程缓存中的线程数量…

2023_Spark_实验三十二:消费Kafka数据并保存到MySQL中

实验目的:掌握Scala开发工具消费Kafka数据,并将结果保存到关系型数据库中 实验方法:消费Kafka数据保存到MySQL中 实验步骤: 一、创建Job_ClickData_Process 代码如下: package examsimport org.apache.kafka.clien…

数据挖掘体系介绍

数据挖掘是什么? 简而言之,对数据进行挖掘,从中提取出有效的信息。一般我们会把这种信息通过概念、规则、规律、模式等有组织的方式展示出来,形成所谓的知识。特别是在这个大数据时代,当数据多到一定程度,…

【Docker-4】Docker 命令

1、镜像管理命令 docker images #查看本机镜像 [rootdocker-0001 ~]# docker imagesdocker search 镜像名称 #从官方仓库查找镜像 [rootdocker-0001 ~]# docker search busybox #需要联网,本次不用操作docker pull 镜像名称:标签 #下载镜像 [rootdocke…

Qt前端技术:2.QSS

border-style:后边是两个参数的话第一个参数改变上下的style 第二个参数改变左右的style 如果后边是三个参数的话第一个参数改变上边的style第二个参数改变左右的style,第三个参数改变的下边的style 如果后边是四个参数的话对应的顺序为上,右…

掌控时间的尝试:基于Flask的自卷系统设计与实现

Gitee源代码仓库:Strong: 一个自卷系统 (gitee.com) 长期苦于自己的时间如脱缰野马,难以掌控,无法投入到我认为自己想做的事情中去。纯粹的自律实在不可靠,我希望借助一些外力来帮助自己挣脱泥潭,于是我制作了这个实验…

Spring MVC控制层框架

三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数(重点) 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…

旅游景区项目信息化建设运营方案:PPT47页,附下载

关键词:智慧景区解决方案,智慧景区建设,智慧景区开发与管理,智慧景区建设的意义,智慧景区管理 一、旅游景区项目信息化建设背景 1、旅游业发展迅速:随着旅游业的不断发展,游客对旅游体验的需求…