请你避坑!!!我在发布java桌面程序时遇到的那些事

前言

最近在用java写一个桌面应用程序 ,遇到了很多错误,在网上也找了很多教程,但是感觉都不是很贴切或者说没有准确指出如何解决。这里就我遇到的一些问题,自己探索出的解决方案进行记录

正文

JavaFX环境问题

这里简单介绍一下java和jdk的版本对应关系:

在早期的Java版本命名规则中,JDK的命名通常带有"1.x"的形式,而Java平台版本被称为"Java x"。这里"x"是代表主要版本号。从Java SE 5(也称作Java 1.5)起,正式版本名里的"1."开始逐渐被省略,并且数字"x"变得更加突出。

这里的规则是:

  • 对于JDK 1.0到JDK 1.4,Java的版本号和JDK的版本号一致(例如:JDK 1.4对应Java 2 Platform)。
  • 从JDK 1.5开始,实际的Java产品版本号转变为"Java x",而1.5成为了版本号的开发代号。实际产品名称上,"1."被省略,重点放在了主版本号上,即5、6、7等等。

因此,当我们说JDK 1.8时,实际上我们指的是Java SE 8平台的开发工具包。这种命名规则有助于区分早期的Java版本(例如JDK 1.2)和较新的版本(如Java SE 8,通常简称为Java 8)。

以下是详细的对应关系:

  • JDK 1.0 对应 Java 1

  • JDK 1.1 对应 Java 1.1

  • JDK 1.2 对应 Java 2

  • JDK 1.3 对应 Java 2

  • JDK 1.4 对应 Java 2

  • JDK 1.5 对应 Java 5 或 Java SE 5

  • JDK 1.6 对应 Java 6 或 Java SE 6

  • JDK 1.7 对应 Java 7 或 Java SE 7

  • JDK 1.8 对应 Java 8 或 Java SE 8

  • 从Java 9开始,Java的版本直接标示为单一数字,而且没有前缀"1."了,即JDK 9、JDK 10、JDK 11等等,与Java SE版本号直接对应。

为什么我要介绍这个版本呢?因为我在写桌面程序的时候用到了JavaFX,但是java9把javafx取了出来

Java 9引入了模块系统,其中包括JavaFX。JavaFX不再是JDK的一部分,而是一个独立的模块。要在Java 9及以上版本使用JavaFX,需要在项目中显式添加JavaFX依赖。

经历过无数次的环境配置失败后,我决定不配置了,最后把jdk版本换成了1.8,然后程序运行正常了。只能说还是老版本对新手友好。

jar包视频运行异常

完成程序运行之后,我将程序导出jar包,但是在程序里面插入了一段视频,本来代码的思路是视频播放完成之后怎么这么做,但是运行jar包遇到问题:在视频播放完之后,程序就卡在了视频的最后一帧,没有了后续行为。但是在IDEA上运行就很正常。很疑惑,找了很多教程,发现很少有人遇到我这种问题,太难受了。

最后的解决方案是,既然检测不到视频视频是否播放完成,我代码的逻辑可以变成视频播放多少秒之后,程序怎么怎么样。修改了逻辑之后,jar包运行正常

exe4j图标问题

我尝试为自己的程序添加图标,这需要ico文件,网上有一些可以jpg转换成ico的网站,但是有些是真的恶心,这里就不贴出恶心的网站了,我说说怎么恶心吧:确实转成了ico文件,然后在exe4j中识别出了,但是在最后生成exe的时候显示ico文件有问题,搜了一些教程之后发现问题:无良网站作者就是给我们换了一个后缀名,这,,,只能说你这么玩,你写出来的网站有什么用?而且网站上面还有很多广告,虽然网站是免费的,但是还是忍不住吐槽。

这里推荐一个jpg转ico的免费网站:www.bitbug.net/

别人的电脑上面运行不了我生成的exe

这里的问题是因为在exe4j中配置jre文件没有使用相对路径,教程中都提到要用相对路径,但是怎么用?没人具体说,这里我们需要注意,前面已经配置了生成exe文件的地址,相对路径就是在这个地址下面:

这样生成的就不是一个单纯的exe文件了,而是多了一个环境,这样双击exe文件就可以正常运行了。

结语

希望这篇文章可以帮助到你,如果在这个过程中有什么问题,欢迎评论区留言。

相关推荐
wangjialelele3 分钟前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
孙启超24 分钟前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop
leoZ23136 分钟前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama
William Dawson40 分钟前
【踩坑实录|Hive1\.2\.1数据服务接口5大疑难问题调试与全方位优化方案】
java·hive·spring boot
2601_955759881 小时前
如何识别 Claude API 低价值调用并优化
java
鹿角片ljp2 小时前
Java框架篇:Spring + SpringMVC + SpringBoot + MyBatis深度复习
java·开发语言
Lyra_Infra2 小时前
Java 应用启动脚本 JDK 路径适配优化文档
java·shell
CodeHackerBhx2 小时前
Spring Boot 4 防重复提交:从接口幂等到 Redis 分布式锁的完整实践
java·数据库·spring boot·redis·分布式
八角.。3 小时前
方法参数与Debug按键
java·开发语言·jvm
BerryS3N3 小时前
Java在人工智能与大模型时代的深度演进:从工程落地、高性能计算到企业级Agent与RAG架构实战指南
java·人工智能·架构