无法在 JLabel 中加载图像

Posted

技术标签:

【中文标题】无法在 JLabel 中加载图像【英文标题】:Unable to load image in JLabel 【发布时间】:2019-05-08 01:19:07 【问题描述】:

这里有这样的错误。

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: 
    Width (0) and height (0) must be non-zero

如何解决?

ResultSet resultSet = connection.query("select url_image from "+name+" where id = "+List.get(i));
java.sql.Blob blob = null;

try 
    while (resultSet.next()) 
        blob = resultSet.getBlob("url_image");
    
 catch (SQLException e4) 
    e4.printStackTrace();

BufferedImage destImage = null;
try 
    destImage = ImageIO.read(blob.getBinaryStream());
 catch (IOException e1) 
    e1.printStackTrace();
 catch (SQLException e1) 
    e1.printStackTrace();

Image scaledImage = destImage.getScaledInstance(photoLabel.getWidth(),photoLabel.getHeight(), Image.SCALE_DEFAULT); // error
ImageIcon imgIc = new ImageIcon(scaledImage);
photoLabel.setIcon(imgIc);

 photoLabel = new javax.swing.JLabel();
 .addComponent(photoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 367, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(photoLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
private javax.swing.JLabel photoLabel;

【问题讨论】:

这段代码的顺序是否正确?您似乎在使用 photoLabel 后实例化了它?当您调用.getWidth() 时,它应该抛出NullPointerException。还有getWidthgetHeight 返回什么,我猜它返回0,这就是你得到那个错误的原因。 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到this Q&A 中看到的图像。例如。 This answer 热链接到嵌入在 this question 中的图像。 3) BTW - 如果标签没有文本或图标,其首选宽度和高度将为 0。 【参考方案1】:

此代码可能会为您提供正确的输出。

 ResultSet resultSet = connection.query("select url_image from "+name+" where id = "+List.get(i));
                    java.sql.Blob blob = null;

                    try 
                        while (resultSet.next()) 
                            blob = resultSet.getBlob("url_image");
                        
                     catch (SQLException e4) 
                        e4.printStackTrace();
                    
                    BufferedImage destImage = null;
                    try 
                        destImage = ImageIO.read(blob.getBinaryStream());
                     catch (IOException e1) 
                        e1.printStackTrace();
                     catch (SQLException e1) 
                        e1.printStackTrace();
                    
                    //Image scaledImage = destImage.getScaledInstance(photoLabel.getWidth(),photoLabel.getHeight(), Image.SCALE_DEFAULT); // error
                    //ImageIcon imgIc = new ImageIcon(scaledImage);
                    //photoLabel.setIcon(imgIc);
                    photoLabel.setIcon(new ImageIcon(destImage ));


     photoLabel = new javax.swing.JLabel();
     .addComponent(photoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 367, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(photoLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    private javax.swing.JLabel photoLabel;

【讨论】:

以上是关于无法在 JLabel 中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

在 JLabel 中显示 BMP

刷新JLabel图标图像

将图像放在 JLabel 和 JButton 上的方法 [重复]

JLabel 中的刷新图像不起作用

通过单击按钮循环浏览 Jlabel 的图像时的 for 循环问题

使用 JLabel 作为背景图像