问题描述:
在编写完Java程序后,打包成Jar时发布,会发现找不到Jar文件中的图片和文本文件,其原因是程序中载入图片或文本文件时,使用了以当前工作路径为基准的方式来指定文件和路径。这与用户运行Jar包时的当前工作路径并不一致。
问题分析:
例如:以Windows为例说明,以下是开发项目“AAA”的部分代码,开发和调试时的根路径为D:\aaa,这样程序运行时当前路径为"D:\aaa",大家可以用System.getProperty("user.dir")方法求证当前用户工作路径。
//下面代码使用了基于当前工作路径的方式指定了文件对象
File imageFile = new File("/images/sample.gif");
ImageIcon imageIcon = new ImageIcon(File.toURI);
File iniFile = new File("/conf.ini");
FileInputStream fileInputStream = new FileInputStream(iniFile.toURI);
/*
*这样程序会去找以下两个文件:
* D:\aaa\images\sample.gif
* D:\aaa\conf.ini
*/
以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到Jar文件中,由于System中的"user.dir"属性发生了变化,会造成用绝对路径的方式无法找到Jar文件中包含路径和文件。例如大家将上面的项目 “AAA”中的所有类文件、图片文件和文本文件等打包为E:\aaa.jar文件并发布,在用户执行该aaa.jar中的程序时,当前路径取决于用户运行该程序的当前路径。
例如: 在“E:\”目录下运行该程序:
E:\>java -jar aaa.jar
此时用户的当前路径(System的user.dir属性)是“E:\”,而非开发者所期望的“E:\aaa”,所以会按以下路径来搜索文件:
E:\images\sample.gif
E:\conf.ini
但是所有的图片和文本文件包含在E:\aaa.jar文件中,所以会致使程序无法正常运行。
问题解决:
为了解决上述问题,推荐采用Java本身以类为基准的路径搜索方式。
例如:
/*
*以下代码采用了以当前类为基准的路径指定方式。下面这行代码在运行时,会
*在jar文件中的根路径,搜索程序中用到的文件。
Reader reader =new InputStreamReader(
getClass().getResourceAsStream("/image/Environment.ini"));
ImageIcon i=new ImageIcon(getClass().getResource("/image/b1.gif"));
以上两行代码采用了下面两条Java语句:
getClass().getResourceAsStream("FileName");
getClass().getResource("File");
含有这种代码的程序在运行时,以类(类路径)为基准,而不依赖当前路径(System中的user.dir)。
注意:上面的路径"/image/Environment.ini"如果写成"image/Environment.ini",将表示在类同路径下的路径(className/image/Environment.ini),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
分享到:
相关推荐
NULL 博文链接:https://jarg.iteye.com/blog/852885
在Java编程中,将程序打包成JAR文件是常见的部署方式,这使得代码可以作为一个独立的可执行单元进行分发。然而,在打包包含数据库连接的Java应用程序时,可能会遇到一些问题,尤其是涉及到像MySQL这样的外部数据库。...
Java程序员在开发过程中经常会遇到这样一个问题:如何将编写好的Java程序打包成一个可执行的Jar文件?在Eclipse中,我们可以通过简单的步骤将Java程序打包成Jar文件,本文将详细介绍这其中的实现步骤和重要的知识点...
Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...
"Java 程序或项目打包成 jar 与 exe 文件" Java 程序或项目打包成 jar 与 exe 文件是 Java 开发中一个重要的步骤。在这里,我们将详细介绍如何将 Java 程序或项目打包成 jar 文件,然后将 jar 文件转换成exe 文件,...
这里提到的“Java程序打包成exe执行文件工具”是指将Java应用转换为可以直接在Windows操作系统上双击运行的exe格式的工具。主要涉及到的技术和步骤如下: 1. **Java程序打包成Jar包**: Java程序通常被打包成JAR...
1. **Java程序打包jar**: - **JAR(Java Archive)**:JAR文件是Java平台特有的归档格式,它允许将多个类文件和其他资源(如图像、声音等)打包到一个文件中。通过使用`jar`命令或者构建工具(如Maven、Gradle)...
在介绍Java程序打包成jar文件和exe文件的详细步骤之前,我们首先要了解基本概念。Java程序通常被打包成jar文件,即Java Archive文件,它是一种基于ZIP格式的压缩文件格式,用于封装Java类文件和相关的元数据和资源。...
为了使Java程序能够在没有安装JDK或JRE的环境下运行,我们可以将jar文件进一步打包成exe文件。这一步通常需要借助于专门的工具。 ##### 2.1 使用j2exe4j - **安装j2exe4j**:j2exe4j是一款强大的Java应用程序打包...
本篇文章将详细介绍如何使用Eclipse将Java程序打包成JAR文件,并确保双击即可运行。 首先,确保你的Java项目已经成功编译并包含所有必要的类文件。这些类文件通常位于项目的`bin`或`build`目录下。在Eclipse中,你...
### Java 文件打包成 JAR 文件详解 #### 一、JAR 命令概述 JAR(Java Archive)是 Java 开发工具包 (JDK) 中的一个实用程序,用于将多个 Java 类文件和其他资源文件打包成一个 JAR 文件。JAR 文件不仅便于分发和...
以下是如何在MyEclipse中将JAVA项目打包成JAR文件的详细步骤: 1. **准备工作** - 确保你的项目已经成功构建,没有编译错误。 - 如果项目有外部依赖,如第三方库,需要决定是否包含在JAR文件中。如果不包含,确保...
Java 程序打包成可执行文件示例是指将 Java 程序编译成.class 文件,然后将其打包成一个可执行的.jar 文件,最后可以使用工具将其转换成.exe 文件。下面是详细的步骤和知识点: 首先,我们需要编写 Java 程序。这里...
根据提供的信息,本文将详细介绍如何通过不同方式将Java程序打包成可执行的JAR文件。 #### 使用`jar`命令手动打包 1. **准备工作**:首先确保所有的`.class`文件位于同一个目录下,例如`D:/chat/`。 2. **创建...
本文将通过一个具体的示例来详细介绍如何将Java程序打包成可执行文件。 #### 示例程序代码 首先来看一下示例程序的代码: ```java package com.test.jar; import java.awt.*; import javax.swing.*; public ...
将springboot打包成的jar文件做成windows服务,解决java程序自启动问题,适合现场部署后无人看管情况,断电后服务器启动后不用管理springboot服务,不用打开cmd,也不担心现场人员误操作关闭cmd窗口。
Java打包成jar文件是将Java程序的类文件、资源文件以及相关的配置文件打包成一个可执行的归档文件,这在软件开发中是一项常见的任务。jar(Java Archive)文件不仅方便了代码的分发和存储,还能提高程序的运行效率,...
**核心概念:** 在将Java程序打包成EXE文件之前,通常需要先将其打包成一个独立的JAR文件。这样做有助于简化后续的打包流程,并确保所有必要的类和资源都被正确包含。 **工具推荐:** `fatJar` 插件是Eclipse用户的一...
在Java开发环境中,有时我们需要将Java程序转换为可被非Java环境执行的程序,例如Windows下的.exe可执行文件。这通常是为了方便用户直接运行而无需安装Java运行环境。本篇文章将详细讲解如何在Java中生成.exe文件,...
通过上述步骤,我们可以有效地将Java程序中的多个Class文件打包成一个JAR文件。这种方式不仅简化了项目的分发流程,还提高了代码的安全性和可维护性。在实际操作过程中,还需要根据具体需求调整细节,例如自定义...