我有这段代码:
ImageIcon ii = new ImageIcon("https://c1.staticflickr.com/9/8384/8682624224_4e44bf947d_h.jpg");
subStream.add(new JLabel(ii));
这意味着将带有照片的JLabel
添加到名为JPanel
的{{1}}。
但它不起作用,没有错误或任何东西。为什么这样?
图像应该出现在第三个JPanel中,就在按钮上方。
答案 0 :(得分:4)
要注意的事情......
ImageIcon
可能会无声地失败...我知道这很烦人...这是因为...... ImageIcon
使用后台线程加载图片,这是因为它设计为允许可能需要时间来完全实现图像的慢源(拨号网络)。您应该使用ImageIO.read
来测试URL
以降低下载图片的潜在问题。如果由于某种原因无法加载图像,则会抛出IOException
,并且会阻止图像完全加载,因此请注意
有关详细信息,请参阅Reading/Loading an Image
例如......
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
try {
BufferedImage img = ImageIO.read(new URL("https://c1.staticflickr.com/9/8384/8682624224_4e44bf947d_h.jpg"));
JLabel label = new JLabel(new ImageIcon(img));
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException exp) {
exp.printStackTrace();
}
}
});
}
}
因此,这会将图像和Web服务器作为潜在问题(至少在我的网络中)进行折扣,您的代码必定存在其他问题。考虑提供一个runnable example来证明您的问题。这将减少混淆和更好的响应
答案 1 :(得分:1)
您正在调用ImageIcon(String filename)构造函数。尝试使用URL:
ImageIcon icon = new ImageIcon(new URL("your URL"));
// Imports
// ...
public class MyFrame extends JFrame
{
public MyFrame()
{
super("Test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
try
{
URL url = new URL("http://upload.wikimedia.org/wikipedia/it/0/0b/Vegeta_-_Sigla_Iniziale_Dragon_Ball_Kai.jpg");
getContentPane().add(new JLabel(new ImageIcon(url)));
}
catch(Exception ex)
{
ex.printStackTrace();
}
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(() ->
{
new MyFrame().setVisible(true);
});
}
}