我在自动加载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,直到呈现为止。
我该如何解决这个问题?我不希望用户点击单独的按钮来加载个人资料照片。它必须是自动的。
提前致谢。
答案 0 :(得分:0)
您可以使用getPreferredSize().width
方法访问已标记的属性。
如果JLabel
未显示getWidth
,则返回0。
如Hovercraft所述,为什么不使用常数来确定用户图像的首选尺寸?