JLabel Image Icon占位符始终在构造函数中返回0。无法加载Blob

时间:2016-03-27 11:37:32

标签: java swing blob jlabel

我在自动加载BLOB时遇到问题,我通过使用我在构造函数中调用的方法从数据库中进行选择。 除了自动检索每个用户登录的图像外,其他所有内容(插入图片,更新图片)都能正常工作。

错误:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (0) and height (0) must be non-zero
    at java.awt.image.ReplicateScaleFilter.<init>(ReplicateScaleFilter.java:102)
    at java.awt.image.AreaAveragingScaleFilter.<init>(AreaAveragingScaleFilter.java:77)

我的方法定义,

private void loadProfilePic(){
        String SQL = "SELECT PROFILE_PIC from allusers_profile_picture WHERE USERID =?";
        try(Connection con = DBUtil.getConnection(DBType.MYSQL);
            PreparedStatement ps = con.prepareStatement(SQL);)
        {
            ps.setInt(1,userId);
            try(ResultSet rs = ps.executeQuery();){
                JOptionPane.showMessageDialog(null,profilePicJlbl.getWidth()+" "+profilePicJlbl.getHeight());
                if(rs.next()){
                    byte[] img = rs.getBytes("PROFILE_PIC");
                    ImageIcon myImageIcon = new ImageIcon(img);
                    Image image = myImageIcon.getImage();
                    Image myImage = image.getScaledInstance
                        (profilePicJlbl.getWidth(), profilePicJlbl.getHeight(),Image.SCALE_SMOOTH);
                    ImageIcon finalImage = new ImageIcon(myImage);
                    profilePicJlbl.setIcon(finalImage);
                }
            } //--end of inner try
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());
        } //--end of catch
    }//--end of method

然后我在构造函数中调用它。

public home(int uId,String uname,String uType) {
        loadProfilePic();
}

我无法想到它会返回0的任何原因。但我在某处读到JLabel的宽度和高度为0,直到呈现为止。

enter image description here

我该如何解决这个问题?我不希望用户点击单独的按钮来加载个人资料照片。它必须是自动的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用getPreferredSize().width方法访问已标记的属性。 如果JLabel未显示getWidth,则返回0。

如Hovercraft所述,为什么不使用常数来确定用户图像的首选尺寸?