[英]No image showing on JFrame when adding image to label
我已经编写了一些代码行,应该在 JFrame 中将图像显示为 label。 这是代码。
ImageIcon image = new ImageIcon("funny.jpg");
JLabel label = new JLabel();
label.setIcon(image);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
frame.add(label);
正如您在问题的评论中被提示的那样,我认为您应该注意确保文件存在于指定位置,例如使用getResource
。
除此之外,您没有将图像的观察者模式用于JLabel
。 尝试将image
的ImageObserver
设置为label
,如下所示:
ImageIcon image = new ImageIcon("funny.jpg");
JLabel label = new JLabel();
label.setIcon(image);
image.setImageObserver(label); // <-- Added this line.
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
frame.add(label);
否则,请参阅setImageObserver
上的相应文档。
您也可以查看相应的教程部分。
这恰好是因为,据我所知, ImageIcon
使用MediaTracker
异步加载图像,因此当您构造ImageIcon
的实例时,它将返回而不会首先阻塞,直到图像完全加载。 设置ImageIcon
的ImageObserver
将确保您提供的ImageObserver
将在 state 更改时收到有关加载图像的 state 的通知。 Component
(它是一个ImageObserver
)的默认实现会重新绘制自身,因此您将能够在图像准备好时看到完全加载的图像。
作为替代方案,您始终可以使用ImageIO#read
它将阻塞直到图像完全加载到 memory (但它只会返回动画 GIF 图像中的单个帧)。
虽然我没有测试它,但这是我经常遇到的一个问题,所以我认为它应该可以工作。 如果有或没有,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.