请你避坑!!!我在发布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文件就可以正常运行了。

结语

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

相关推荐
徐*红7 分钟前
java 线程池
java·开发语言
尚学教辅学习资料7 分钟前
基于SSM的养老院管理系统+LW示例参考
java·开发语言·java毕设·养老院
2401_857636397 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
1 9 J9 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
Code apprenticeship10 分钟前
Java面试题(2)
java·开发语言
憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
霖雨3 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言