一、问题

ImageIcon icon = new ImageIcon("pic.jpg");

执行结果是icon无法显示

二、解决

类中有如下调用:

ImageIcon icon = new ImageIcon("pic.jpg");

很自然地认为当前类文件和图片在同一路径下即可。

其实所谓的相对路径起点是工程的根目录,即project。

这行代码执行时在project目录下查找名为pic.jpg的文件,结果当然是找不到。

假如你的工程根目录为:project1

你的图片文件放在:project1/src/images/pic.jpg

所以正确的调用是:

ImageIcon icon = new ImageIcon("src/images/pic.jpg");

这行代码执行时在project目录下查找到了文件,当然也可以写成

ImageIcon icon = new ImageIcon("./src/images/pic.jpg");

注意两者的区别,要记住的是src是在project下的目录

总结起来就是一句话:所谓相对路径就是相对于工程根目录的位置^_^

三、其他

第一种查看了一下ImageIcon的构造函数。

Public ImageIcon(String filename)//参数可以是绝对路径也可以是相对路径

Public ImageIcon(URL url)

第二种通过URL来得到图片

URL url = getClass().getResource("pic.jpg"); //当前编译后class文件所在目录查找

ImageIcon icon = new ImageIcon(url);

第三种可以通过图片的ID来添加图片:

Icon icon=new ImageIcon("pictrue/pic_"+pictureID+".jpg");

问题讨论:

出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:

一、通过使用外部资源文件的方式解决

把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIcon

image=new ImageIcon(SwingResourceManager.getImage("icons/logo.jpg"));就可以了。

这种方式下,图片文件与类文件不是一块放在包中的,类文件在包中,而图片文件在项目根目录下。

二、通过使用内部资源文件的方式解决

把所用的图片文件放在项目使用的包中,打包时把图片文件同时打进Jar文件中。这种方式在具体代码中应使用下面其中一种:

ImageIcon image = newImageIcon(this.class.getResource("icons/logo.jpg"));

下面对这种方式详细说明:

问题解决:

当你编写一个图形界面的程序的时候,你肯定要使用各种图片资源。那么,当你发布你的程序的时候,这些图片资源如何发布呢?最简洁的方式就是将这些图片资源连同你的class文件一起打包为一个可执行Jar文件,这样你只需发布一个jar文件就囊括了所有的内容,用户只需双击该Jar文件就能运行程序。如果把图片打包在Jar文件中,编写程序的时候如何访问这些图片呢?这些图片的路径是什么呢?可以用getResource()方法来解决这个问题。下面我们具体分析2种最常见的情况:

1、你将所有资源打包为andy.jar,你的类位于一个包中:package andycpp;你的图片资源全部放在images文件夹中,而images文件夹也位于andycpp包内。这样的话,最终的路径表现为:

andy.jar

|__andycpp

|__GUITest.class

|__ images

|__ Snap1.jpg

因为图片文件夹和引用他的类位于同一个层次,因此可以通过相对路径来访问:getResource()方法,但是你不能随便用,你只能使用和图片文件夹处于同一层次的类的getResource()方法。比如上图中,GUITest类和images处于同一层次,所以要使用该类的getResource()方法。

2、另一种情况,如果你的类有很多,并且包结构很复杂,那么你就不大可能把图片和类放在同一个层次上,而是应该把图片放到最外层,让所有的类通过绝对路径来访问该图片:

andy.jar

|__andycpp

|__GUITest.class

|__ images

|__Snap1.jpg

代码如下:

javpic.net.URL imgURL =GUITest.class.getResource("/images/Snap1.jpg");

ImageIcon img1 = new ImageIcon(imgURL);

大家看到和上述代码的区别了吗?区别非常细微,仅仅是在“images”的前面加了一个反斜杠"/",这个反斜杠就表示根目录,没有反斜杠就表示相对路径。

javpic.net.URL imgURL =GUITest.class.getResource("images/Snap1.jpg");

ImageIcon img1 = newImageIcon(imgURL);

icon=newImageIcon()如何加载同一文件夹中的已有图片:相关推荐

  1. dosbox更新加载的文件夹

    在dosbox中加载了文件夹,如果该文件夹在外面添加了文件或者修改文件,在dosbox中不会自动进行同步.我之前只能通过关闭dosbox,然后又重新打开来更新文件夹.今天在dosbox的wiki上看到 ...

  2. Glide加载drawable文件夹下的gif动态图

    记录一下:如何简单的加载drawable文件夹下的gif动态图. (1) 添加Glide依赖 compile 'com.github.bumptech.glide:glide:3.7.0' (2)加载 ...

  3. html5默认加载s文件夹,『总结』web前端开发常用代码整理

    IE条件注释 条件注释简介 IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法. 条件注释只能用于IE5以上,IE1 ...

  4. 图片名字存在txt文件中,从另一个装有图片的文件夹中筛选对应的图片。python代码

    txt文件的每一行都存一张图片的名字(带尾缀),从另一个存有全部图片的文件中筛选txt中存在的图片. # -*- coding: UTF-8 -*- # !/usr/bin/env python im ...

  5. html如何加载cad文件夹,CAD如何加载lsp,CAD自动加载lsp

    回答: CAD软件中毒现象(只要有下面任一种情况,就有可能是中LSP病毒了) 1.浩辰云建筑.天正菜单无法正常加载,每次启动程序都需要重新手工加载一遍: 2.浩辰云建筑.天正菜单上的LSP命令,如画剖 ...

  6. Unity 加载StreamingAssets 文件夹下批量图片

    这个文件夹下加载批量图片,可以随时更新图片,加或者删除; 首先创建这个文件夹StreamingAssets,如下图 不同的文件夹下放入了不同的图片内容: 然后开始创建LoadPanel.cs 主要是加 ...

  7. phpcms 加载php文件夹,PhpCMS模板管理及文件目录说明

    帝国CMS技术互助群:540946827 一帮大神带你装逼带你飞!还有漂亮的妹纸陪你玩哦! 一.管理模板说明 1.所有模板方案都保存在 ./templates/ 目录下(假如需要在线修改,请通过ftp ...

  8. java 加载 xsd文件_Spring中自定义xsd文件操作方式

    1 设置html文件的语法格式xsd文件 根据POJO的属性编写xsd文件. 例如 targetNamespace="http://www.zhangyh.com/schema/user&q ...

  9. potplayer默认专辑加载同一文件夹下所有视频,只读取一部分视频,加载视频目录不完整

    1.找到基本设置 2.选"同时打开全部文件" 3.markdown图片去水印小技巧,删除括号内问号后面的内容即可

最新文章

  1. ISE安装和FLASH烧录
  2. R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe)
  3. 提取图片纹理_Fundamentals Of Computer Graphics 第十一章 纹理映射(中)
  4. Swift云存储特性研究
  5. java中为什么使用上转型和下转型
  6. ES6箭头函数(节选自《ECMAScript 6 入门》)
  7. java 消息队列_消息队列-RabbitMQ在JAVA中的应用(1)
  8. UVA10934 Dropping water balloons【DP】
  9. DB9接口公头母头引脚区别
  10. 用Unity写设计模式-外观模式
  11. 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
  12. python基本代码教程-如何真正零基础入门Python?(第一节)
  13. 镜头焦距、光圈、物距与景深之间的关系
  14. 局部敏感哈希算法介绍
  15. Excel实现数据可视化
  16. 天台人满为患,不如来看下这个Ramnit蠕虫DesktopLayer.exe分析
  17. [RK3288][Android6.0] RK3288和RK3288-W版本说明
  18. 矩阵求和及Kadane算法
  19. MPU6050的dmp代码移植的过程--转
  20. SpringBoot参数校验

热门文章

  1. 项目一,认识linux操作系统
  2. 三分钟热度的人,无法过上自律的生活
  3. 《计算机网络》局域网
  4. 这100个shell脚本案例,你都知道吗?一篇教会你写90%的shell脚本
  5. H5前端,正方体动画效果
  6. Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
  7. C语言中单引号 39 97 39,C語言程序设计实验指导书.doc
  8. 2015年,移动互联网进入拼“活跃度”时代
  9. .zip.001 .zip.002怎么用压缩包解压缩
  10. 生物医学关键词及基础知识学习笔记