Java项目打包成Jar文件后图片不显示的问题解决
2013-11-13 20:09
751 查看
文章一:
出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:
一、通过使用外部资源文件的方式解决
把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIcon image=new ImageIcon(SwingResourceManager.getImage("imagefilePath"));就可以了。
这种方式下,图片文件与类文件不是一块放在包中的,类文件在包中,而图片文件在项目根目录下。
二、通过使用内部资源文件的方式解决
把所用的图片文件放在项目使用的包中,打包时把图片文件同时打进Jar文件中。这种方式在具体代码中应使用下面其中一种:
1.ImageIcon image = new ImageIcon(this.getClass().getResource("imagefilePath"));
2.ImageIcon image = new ImageIcon(main.class.getResource("imagefilePath"));
3.ImageIcon = SwingResourceManager.getImage(main.class,"imagefilePath");
4.3.ImageIcon = SwingResourceManager.getImage(this.getClass(),"imagefilePath");
3和4中第一个参数代表图片文件路径的参照对象,不能少,否则不能正确获得图片资源。
最后,朋友们一定要注意大小写的问题,在项目中文件名的大小写没有影响,但是打包后,就必须注意文件名大小写问题了,否则也是不行的。
==================================================================================================================
文章二:
在编写完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);
以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到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),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream;
import java.io.InputStreamReader; public class Test { public Test (){ try {
// "/Test/123.txt" 相对于包的路径,区分大小写
InputStream input= this .getClass () .getResourceAsStream ( " /image/sample.gif " )
System.out.println ( this .getClass () .getResource ( "/ conf.ini " )) ; BufferedReader in= new BufferedReader ( new InputStreamReader ( input )) ; String a;
while ( true ){ a=in.readLine () if ( a== null )
break
System.out.println ( a+ "-----" ) }
in.close ()
} catch ( IOException e ) { e.printStackTrace () } }
public static void main ( String [] args ){ new Test () } }
==================================================================================================
注意:在开发和调试期(未打包前)使用上述方法是无效的。
本文转自:http://blog.csdn.net/greenbonus/article/details/10072063
百度提问:
出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:
一、通过使用外部资源文件的方式解决
把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIcon image=new ImageIcon(SwingResourceManager.getImage("imagefilePath"));就可以了。
这种方式下,图片文件与类文件不是一块放在包中的,类文件在包中,而图片文件在项目根目录下。
二、通过使用内部资源文件的方式解决
把所用的图片文件放在项目使用的包中,打包时把图片文件同时打进Jar文件中。这种方式在具体代码中应使用下面其中一种:
1.ImageIcon image = new ImageIcon(this.getClass().getResource("imagefilePath"));
2.ImageIcon image = new ImageIcon(main.class.getResource("imagefilePath"));
3.ImageIcon = SwingResourceManager.getImage(main.class,"imagefilePath");
4.3.ImageIcon = SwingResourceManager.getImage(this.getClass(),"imagefilePath");
3和4中第一个参数代表图片文件路径的参照对象,不能少,否则不能正确获得图片资源。
最后,朋友们一定要注意大小写的问题,在项目中文件名的大小写没有影响,但是打包后,就必须注意文件名大小写问题了,否则也是不行的。
==================================================================================================================
文章二:
在编写完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);
以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到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),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream;
import java.io.InputStreamReader; public class Test { public Test (){ try {
// "/Test/123.txt" 相对于包的路径,区分大小写
InputStream input= this .getClass () .getResourceAsStream ( " /image/sample.gif " )
System.out.println ( this .getClass () .getResource ( "/ conf.ini " )) ; BufferedReader in= new BufferedReader ( new InputStreamReader ( input )) ; String a;
while ( true ){ a=in.readLine () if ( a== null )
break
System.out.println ( a+ "-----" ) }
in.close ()
} catch ( IOException e ) { e.printStackTrace () } }
public static void main ( String [] args ){ new Test () } }
==================================================================================================
注意:在开发和调试期(未打包前)使用上述方法是无效的。
本文转自:http://blog.csdn.net/greenbonus/article/details/10072063
百度提问:
请问 URL file=this.getClass().getResource("C:\\login.wav"); 为什么得到的file =null?得不到我想要的资源 我用这个是想用来播放W***音频的
回答:
this.getClass().getResource是得到当前对象对应的类文件(*.class)所在的目录下的文件。所以通过this.getClass().getResource去获得C盘中的数据是获取不到的。 像C:\\login.wav这样的绝对路劲,你可以这样来获取: URL url = new File("C:\\login.wav").toURI().toURL();截至:http://zhidao.baidu.com/link?url=jUw4u7mNmReHGrcv8DCcoR4N1KxibqI0Y5FmLA3npBfM5ZNvBicEztKPQZVXPKmQs-H8if0iYdzHDxJ9dY5vZK
相关文章推荐
- Java项目打包成Jar文件后图片不显示的问题解决
- Java应用程序打包成jar文件后,运行jar包后不能显示图片的问题
- 关于eclipse导出Java项目形成的jar包中没有图片以及图片显示问题
- java 修改jar中的menifest.mf文件后重新打包过程中遇到的中文问题解决
- Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法
- intellij IDE build出错,无法显示图片,找不到tomcat server,java编译版本过低,异常推出后无法启动项目等常见问题解决
- [转]java程序打包成jar,图片文件问题
- webpack打包vue项目后,一些文件图片路径找不到的问题解决办法
- Eclipse中Java项目打包——外部jar包位置 ,生成jar包位置,mf文件书写等问题
- java程序打包成jar,图片文件问题
- 解决java项目打成jar包之后,GUI界面的logo无法显示问题
- 详解eclipse将项目打包成jar文件的两种方法及问题解决方法
- java上传文件到磁盘中,设置tomcat虚拟路径进行访问,解决重布项目图片消失问题
- Java project 项目中应用图片打包后图片不能显示的解决办法
- 解决项目打jar包,资源文件不能打包的问题
- Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法
- Eclipse中Java项目打包——外部jar包位置 ,生成jar包位置,mf文件书写等问题
- 解决eclipse中java项目导出成jar包后读写UTF-8文件中文乱码问题
- Linux系统下Java应用程序打包成.jar文件遇到问题与解决问题
- 解决vue项目打包后提示图片文件路径错误的问题