关于路径定义(绝对路径,相对路径,Source Root,Content Root等等)的问题不在此文讨论的范围,。
前端通过相对路径,绝对路径调用图片一般不会出现不显示的情况。
但是java通过new ImageIcon()加载图片时,图片却不法正常显示(绝对路径可以),相对路径代码预览时路径图片可以显示,但运行时却是空白。
一、先看一下IDEA右键PATH相关的技巧
对着IDEA左侧目录时的文件点右键,选–>Copy Path/Reference,然后会出现如下菜单,最下面的三行,只有设置Resources目录时才会出现。
Absolute Path //E:\java\dvy\src\main\resources\image\index.jpg
File Name // index.jpg
------------------
Path from Content Root // src/main/resources/image/index.jpg
Path from Source Root // image/index.jpg
Toolbox URL // jetbrains://idea/navigate/reference?project=MyTank&path=image/index.jpg
二、分析问题:
1、项目(模块)目录关系
MyEclispe支持资源浏览窗口里多个项目显示,在IDEA里只有让项目以Modules(模块)显示。
先看下项目结构
E:\java\
--------dvy // Modules(模块,项目)dvy
--------dvy\src\main\resources\image\index.jpg // dvy项目下图片路径
--------MyTank // Modules(模块,项目)MyTank
--------MyTank\src\main\resources\
2、出现的问题:
IDEA同窗口下多模块(项目)同时开发时,出现图片资源无法正常加载。
JLabel jl = new JLabel(new ImageIcon("image/index.jpg")); // 只有使用绝对路径时可以正常显示,这种路径写法在IDEA指向该路径时是可以看到图片的。使用Resources标记目录,及其它方式均无法正常显示。
注意:关于具体的打包Resources等目录具体是怎么转换,资源是怎么拷贝打包的不在此问题的讨论范围。
通过第一部分对IDEA右键PATH的相关分析,我们可以看到
Toolbox URL // jetbrains://idea/navigate/reference?project=MyTank&path=image/index.jpg
那这么问题原因就显现出来了,明明是dvy模块(项目)却显示project=MyTank。
错误原因:
同一窗口中两个模块(项目),在导入或者其它操作过程中,导致一些项目配置信息混乱,致使只识别到MyTank模块(项目)。因此,使用IDEA进行多模块(项目)开发时,需要调用图片资源时可要注意这个坑。
3、解决方法:
把多余的另一个(模块)(Ctr + Shift + Alt + s –>Modules)移除,并物理移动到非同一目录。
重新导入正在开发的项目,然后问题就解了。
这也许是IDEA唯一一点相对MyEclipse美中不足的问题,多个模块(项目)时导致引入图片失败。
JLabel jl = new JLabel(new ImageIcon("image/index.jpg"));
OK,调用一切正常。
针对JAVA项目(IDEA下是Modules),文件路径以src所在的目录为基准,调用方法如下(以上图目录为例):
JLabel jl = new JLabel(new ImageIcon("image/index.jpg")); // image与src目录平级
JLabel jl = new JLabel(new ImageIcon("src/main/resources/image/index.jpg")); // 使用src目录时的调用方法