Java Swing桌面项目打包成可执行jar

前言

最近有需求,将Swing项目打包为一个可执行的jar包,遇见了一些问题,参考AI助手,解决了遇到的问题,也有一些亲身实践体会,记录一下。开发环境IntelliJ IDEA,JDK8,用kotlin语言实现了一些类。

1.IDEA打jar包配置,没有用gradle或maven

内容来源某一言
如果你没有使用 Gradle,你可以按照以下步骤手动打包你的 Swing 项目为可执行的 JAR 文件:

  1. 确保你的项目设置正确:

    • 确保你的项目是一个 Kotlin Swing 项目,并且所有源代码都在正确的目录结构中。
  2. 打开你的项目在 IntelliJ IDEA 中:

  3. 配置项目:

    • 在项目视图中,找到并右击你的项目。
    • 选择 “Open Module Settings” 或 “Project Structure”。
    • 在左侧菜单中选择 “Modules”。
    • 在右侧的 “Dependencies” 选项卡中,确保你的所有依赖都被正确添加。对于 Swing,你可能需要添加一些库或框架的依赖。
  4. 创建可执行的 JAR 文件:

    • 打开项目结构设置后,选择 “Artifacts”。
    • 在左侧的列表中,选择 “Kotlin class” 或类似的选项。
    • 在右侧,选择 “From Modules with dependencies”。
    • 在 “Output layout” 中,确保你的主类和资源都被包含在内。
    • 在 “Build on make” 下拉菜单中,选择一个适当的选项,如 “package project into a single file”。
    • 点击 “OK” 来关闭对话框。
  5. 生成 JAR 文件:

    • 在 IntelliJ IDEA 的顶部菜单中,选择 “Build” 或 “Rebuild Project”。这将会重新构建你的项目并生成 JAR 文件。
  6. 找到并运行 JAR 文件:

    • 在项目目录下的 out/artifacts/ 文件夹中找到生成的 JAR 文件。
    • 使用命令行或终端,导航到该文件夹并运行以下命令来执行 JAR 文件:
    bash`java -jar yourprojectname.jar`
    

    这里 yourprojectname.jar 是你的 JAR 文件名。确保你有足够的权限来执行这个文件。如果你在 Windows 上,你可能需要使用 .exe 后缀来执行 JAR 文件。例如:java -jar yourprojectname.jar.exe

2.资源的处理

在使用资源的时候,需要注意这个问题,比如图片、音频等,在开发阶段,使用方法和打包为可执行jar后还是有区别的。不然可能造成资源读取失败。

>imagebg_key.png
>pageWork.java
    val path = javaClass.getResource("../image/bg_key.png")println(path)var img = ImageIO.read(path)

上面这段代码是根据相对路径读取图片资源,图片保存在一个java package文件夹中,这样运行起来,可以正常读取到图片。

可是如果打包为可执行jar,程序就出错了。报错类似下图
在这里插入图片描述
这种情况可以使用Class.getResourceAsStream() 方法来读取资源,路径的话就是jar包中的路径,注意加/,/代表jar文件的根目录路径。

val stream = javaClass.getResourceAsStream("/game/image/bg_key.png")
val img = ImageIO.read(stream)

实践证明,也可以继续使用Class.getResource()方法,只要资源路径没问题,就能正常读取到资源。

2.资源处理参考某一言

当你将一个 Java 项目打包为一个可执行的 JAR 文件时,类的 class 路径和 JAR 文件的 class 路径是不同的。在打包之前,你可以通过相对路径或绝对路径来访问类路径下的资源。但在打包为 JAR 文件后,这些资源被包含在 JAR 文件中,不再是类路径下的文件。

如果你在打包后的 JAR 文件中尝试使用类路径来访问图片文件,那么将会失败,因为 JAR 文件并不包含类路径下的文件结构。

要解决这个问题,你可以使用以下方法之一:

  1. 使用 Class.getResourceAsStream() 方法:
    这是最常见的方法,用于从 JAR 文件中读取资源。这种方法使用的是 JAR 文件的资源路径,而不是类路径。例如:
InputStream inputStream = YourClass.class.getResourceAsStream("/images/my_image.png");

注意,路径前面的 / 是必需的,它表示从 JAR 文件的根目录开始查找资源。
2. 将资源放在正确的位置:
确保你的图片文件放在了正确的位置,以便能够通过 getResourceAsStream() 方法正确地访问它。通常,你可以将资源放在与类相同的包中,或者放在一个单独的包中,并在 getResourceAsStream() 方法中使用适当的路径。
3. 使用外部资源:
如果你的应用程序需要访问外部文件或目录中的资源,而不是从 JAR 文件中访问资源,那么你可能需要将这些资源放在一个外部位置(例如文件系统中的一个文件夹),并在代码中提供适当的路径来访问它们。
4. 修改构建脚本:
如果你使用 Gradle 或 Maven 等构建工具,你可以修改构建脚本,以便在打包 JAR 文件时将资源包含在内。例如,在 Gradle 中,你可以使用 resources 配置来包含资源。

总之,当你在打包 JAR 文件后遇到资源访问问题时,关键是要了解 JAR 文件和类路径之间的区别,并使用适当的方法来访问资源。

4.总结

参考AI助手,解决问题快多了。

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

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

相关文章

C#实现对任意区域任意大小的截图

1,目的: 实现类似系统截图工具那样对屏幕任何区域自定义大小的截图。 2,效果展示: 点击截图 选择需要截图的区域: 区域选择完成后,单击右键完成截图: 在合适的载体上粘贴截图: 3,…

Java基础进阶03-注解和单元测试

目录 一、注解 1.概述 2.作用 3.自定义注解 (1)格式 (2)使用 (3)练习 4.元注解 (1)概述 (2)常见元注解 (3)Target &#x…

C++:auto 关键字 范围for

目录 auto 关键字: 起源: auto的使用细则: auto不能推导的场景: 范围for: 范围for的使用条件: C的空指针: 注意: auto 关键字: 起源: 随着程序越…

【lodash.js】非常好用高性能的 JavaScript 实用工具库,防抖,深克隆,排序等

前言:lodash是一款前端必须要知道的js库,它里面提供了许多常用的功能和实用的工具函数 基本上我参与的项目中都有lodash,只能说lodash太强大了,lodash.js 提供了超过 300 个实用的工具函数,涵盖了很多常见的编程任务 l…

【CentOS】Linux 文件权限与权限修改

目录 1、Linux 中的文件属性 2、如何修改文件属性与权限 3、目录权限与文件权限的区别 4、Linux 中的文件扩展名 用户与用户组是Linux文件权限的重要组成部分。 首先,一定要明确用户与用户组的概念: Linux 一般将文件可读写的身份分为三个类别&#…

Jmeter学习系列之一:Jmeter的详细介绍

目录 一、Jmeter的介绍 二、Jemeter的特点 三、Jemter相关概念 3.1采样器(Samplers) 3.2逻辑控制器(Logic Controllers) 3.3监听器(Listeners) 3.4配置元件(Configuration Elements&#…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

关于AOP的@Around特殊处理RequestBody的使用小结

目录 1. 概述 1.1 背景 1.2 源码 2. 测试 2.1 Controller 2.2 SpecialName配置 2.3 RequestConverter 2.4 测试 最近项目上遇到一个这样的需求:用户请求的时候传过来A,在api处理过程中要把A当成B去处理,但是返回的标识中又必须是A作为…

(N-141)基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

Linux 增加 SWAP 空间

一、需求 通过阿里云启动项目时,使用Vuepress build编译静态页面时内存需要800MB,导致内存不够,因此考虑使用swap方式,置换一些内存资源存放swap磁盘。 [rootxxx myblog]# npm run docs:dev> myblog1.0.0 docs:dev > vuep…

Linux 下查看端口以及释放端口

目录 一、查看端口是否被占用 1、使用 netstat 命令 2、使用 lsof 命令 二、释放端口 1、使用kill命令 2、使用 fuser 命令 三、netstat 四、lsof 五、fuser 一、查看端口是否被占用 在 Linux 系统上,你可以使用 netstat 或 lsof 命令来查看端口是否被占用。…

QT实现USB摄像头接入显示

一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应…

分段函数线性化方法matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

微信小程序元素/文字在横向和纵向实现居中对齐、两端对齐、左右对齐、上下对齐

元素对齐往往是新学者的一大困惑点,在此总结常用的各种元素和文字对齐方式以供参考: 初始显示 .wxml <view style="width: 100%;height: 500rpx; background-color: lightgray;"><view style="width: 200rpx;height:100rpx;background-color: aqu…

STM32-LwESP 移植

LwESP 是一个专门解析 Espressif 公司旗下 ESP 系列芯片 AT 指令的开源库&#xff0c;具有以下特性&#xff1a; 支持 Espressif 公司 ESP32, ESP32-C2, ESP32-C3, ESP32-C6 和 ESP8266 芯片。独立平台&#xff0c;采用 C99 标准编写&#xff0c;易于移植。允许不同的配置来优…

Java基础知识-异常

资料来自黑马程序员 异常 异常&#xff0c;就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是&#xff1a; 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;…

Qt : Style Sheet

When a style sheet is active, the QStyle returned by QWidget::style() is a wrapper “style sheet” style, not the platform-specific style. The wrapper style ensures that any active style sheet is respected and otherwise forwards the drawing operations to t…

一天吃透面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

mac裁剪图片

今天第一次用mac裁剪图片&#xff0c;记录一下过程&#xff0c;差点我还以为我要下载photoshop了&#xff0c; 首先准备好图片 裁剪的目的是把图片的标题给去掉&#xff0c;但是不能降低分辨率&#xff0c;否则直接截图就可以了 解决办法 打开原始图片(不要使用预览&#xf…

程序媛的mac修炼手册-- 如何用Python节省WPS会员费

上篇分享了如何用微博爬虫&#xff0c;咱举例爬了女明星江疏影的微博数据。今天就用这些数据&#xff0c;给大家安利一下怎么用Python实现WPS中部分Excel付费功能。 MacOS系统自带的工具&#xff0c;绝大多数都非常顶&#xff0c;除Numbers外。当然&#xff0c;page比起word来&…