尝试显示我的徽标时遇到问题。图片保存在与main.java相同的文件夹中
ImageIcon im = new ImageIcon("banner.png");
JLabel bam = new JLabel(im);
grid.add(bam);
我的语法有问题吗?
答案 0 :(得分:3)
尝试ImageIcon im = new ImageIcon(new File("banner.png"));
如果您正在使用eclipse,请将其放在根文件夹中,而不是src文件夹中。根文件夹有src文件夹和bin文件夹。
答案 1 :(得分:3)
有任何可能的问题,但可能的问题是,图像的位置与执行应用程序的位置不在同一上下文中。
让我们说,main.java
生活在某个目录中(为了论证,我们只说“path / to / class”),然后当你执行main.java
时,图像的路径会变成某种东西比如/path/to/class
,这意味着你应该使用像...这样的东西。
ImageIcon im = new ImageIcon("path/to/class/banner.png");
这也假设图像还没有Jar'ed,因为ImageIcon(String)
需要文件系统上文件的路径。
如果该程序已被Jared,那么您将无法使用ImageIcon(String)
,因为banner.png
不再是文件,而是资源,那么您需要使用类似的东西...
ImageIcon im = new ImageIcon(getClass().getResource("/path/to/class/banner.png"));
其中/path/to/class
是main.java
所在的包裹。
在任何一种情况下,我都建议您使用ImageIO.read
代替,因为当出现问题时,这实际上会抛出IOException
,而ImageIcon
往往会无声地失败...... < / p>
请查看Reading/Loading an Image了解详情
答案 2 :(得分:1)
如果在源目录中创建名为images(或您喜欢的任何名称)的文件夹,然后将banner.png文件放在该文件夹中,则可以使用以下代码。
ImageIcon im = new ImageIcon(this.getClass().getResource("/images/banner.png"));
答案 3 :(得分:0)
我知道这是一篇旧帖子,但我在我的项目中遇到了同样的问题并通过提供ImageIcon
定义中的完整路径来修复它,而不仅仅是项目中的路径。即
ImageIcon im = new ImageIcon("C:/your/image/file/path/banner.png);
它为我解决了这个问题,但我确实认识到这不是一个有效的长期解决方案,因为它只能在开发人员的机器上工作,我不确定是否可移植性是一个问题。
希望我帮助了某个人。
答案 4 :(得分:-1)
这里可能会发生很多事情,如果没有更多代码,很难说清楚。基于上面的简短片段(并假设其他一切都正确),您应该使用getImageLoadStatus()方法检查ImageIcon的图像加载状态。如果它返回MediaTracker.COMPLETE那么你就可以了,错误就在这段代码之外。如果它不是COMPLETE那么你在加载图像时会遇到某种问题。也许它不在路径或类路径中?