icon=newImageIcon()如何加载同一文件夹中的已有图片:
一、问题
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()如何加载同一文件夹中的已有图片:相关推荐
- dosbox更新加载的文件夹
在dosbox中加载了文件夹,如果该文件夹在外面添加了文件或者修改文件,在dosbox中不会自动进行同步.我之前只能通过关闭dosbox,然后又重新打开来更新文件夹.今天在dosbox的wiki上看到 ...
- Glide加载drawable文件夹下的gif动态图
记录一下:如何简单的加载drawable文件夹下的gif动态图. (1) 添加Glide依赖 compile 'com.github.bumptech.glide:glide:3.7.0' (2)加载 ...
- html5默认加载s文件夹,『总结』web前端开发常用代码整理
IE条件注释 条件注释简介 IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法. 条件注释只能用于IE5以上,IE1 ...
- 图片名字存在txt文件中,从另一个装有图片的文件夹中筛选对应的图片。python代码
txt文件的每一行都存一张图片的名字(带尾缀),从另一个存有全部图片的文件中筛选txt中存在的图片. # -*- coding: UTF-8 -*- # !/usr/bin/env python im ...
- html如何加载cad文件夹,CAD如何加载lsp,CAD自动加载lsp
回答: CAD软件中毒现象(只要有下面任一种情况,就有可能是中LSP病毒了) 1.浩辰云建筑.天正菜单无法正常加载,每次启动程序都需要重新手工加载一遍: 2.浩辰云建筑.天正菜单上的LSP命令,如画剖 ...
- Unity 加载StreamingAssets 文件夹下批量图片
这个文件夹下加载批量图片,可以随时更新图片,加或者删除; 首先创建这个文件夹StreamingAssets,如下图 不同的文件夹下放入了不同的图片内容: 然后开始创建LoadPanel.cs 主要是加 ...
- phpcms 加载php文件夹,PhpCMS模板管理及文件目录说明
帝国CMS技术互助群:540946827 一帮大神带你装逼带你飞!还有漂亮的妹纸陪你玩哦! 一.管理模板说明 1.所有模板方案都保存在 ./templates/ 目录下(假如需要在线修改,请通过ftp ...
- java 加载 xsd文件_Spring中自定义xsd文件操作方式
1 设置html文件的语法格式xsd文件 根据POJO的属性编写xsd文件. 例如 targetNamespace="http://www.zhangyh.com/schema/user&q ...
- potplayer默认专辑加载同一文件夹下所有视频,只读取一部分视频,加载视频目录不完整
1.找到基本设置 2.选"同时打开全部文件" 3.markdown图片去水印小技巧,删除括号内问号后面的内容即可
最新文章
- ISE安装和FLASH烧录
- R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe)
- 提取图片纹理_Fundamentals Of Computer Graphics 第十一章 纹理映射(中)
- Swift云存储特性研究
- java中为什么使用上转型和下转型
- ES6箭头函数(节选自《ECMAScript 6 入门》)
- java 消息队列_消息队列-RabbitMQ在JAVA中的应用(1)
- UVA10934 Dropping water balloons【DP】
- DB9接口公头母头引脚区别
- 用Unity写设计模式-外观模式
- 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
- python基本代码教程-如何真正零基础入门Python?(第一节)
- 镜头焦距、光圈、物距与景深之间的关系
- 局部敏感哈希算法介绍
- Excel实现数据可视化
- 天台人满为患,不如来看下这个Ramnit蠕虫DesktopLayer.exe分析
- [RK3288][Android6.0] RK3288和RK3288-W版本说明
- 矩阵求和及Kadane算法
- MPU6050的dmp代码移植的过程--转
- SpringBoot参数校验
热门文章
- 项目一,认识linux操作系统
- 三分钟热度的人,无法过上自律的生活
- 《计算机网络》局域网
- 这100个shell脚本案例,你都知道吗?一篇教会你写90%的shell脚本
- H5前端,正方体动画效果
- Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
- C语言中单引号 39 97 39,C語言程序设计实验指导书.doc
- 2015年,移动互联网进入拼“活跃度”时代
- .zip.001 .zip.002怎么用压缩包解压缩
- 生物医学关键词及基础知识学习笔记