即使值为空,如何使程序继续运行
How to make the program continues even if the value is null
我在 java 和 MySQL 中有一个数据库程序。但是问题是:当SQL中IMAGE的数据为空时,程序停止加载图片。
它显示 "java.lang.IllegalArgumentException: input == null!"。我的问题是如何将图标图片设置为空并继续。
try{
PreparedStatement ps = conn.prepareStatement(President);
ResultSet rs = ps.executeQuery();
if(rs.next()){
rs.absolute(1);
FirstName1.setText(rs.getString("cFirstname"));
LastName1.setText(rs.getString("CLastname"));
MiddleName1.setText(rs.getString("cmiddlename"));
BufferedImage im1 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image1 = new ImageIcon(im1);
Image img1 = image1.getImage();
Image newImage = img1.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after = new ImageIcon(newImage);
btnPic1.setIcon(after);
btnPic1.setText("");
FirstName1.setVisible(true);
LastName1.setVisible(true);
btnPic1.setVisible(true);
MiddleName1.setVisible(true);
}
在我的数据中,此处存储的图像为空。
if(rs.next()){
rs.absolute(2);
FirstName2.setText(rs.getString("cFirstname"));
LastName2.setText(rs.getString("CLastname"));
MiddleName2.setText(rs.getString("cmiddlename"));
BufferedImage im2 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image2 = new ImageIcon(im2);
Image img2 = image2.getImage();
Image newImage2 = img2.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after2 = new ImageIcon(newImage2);
btnPic2.setIcon(after2);
btnPic2.setText("");
FirstName2.setVisible(true);
LastName2.setVisible(true);
btnPic2.setVisible(true);
MiddleName2.setVisible(true);
}
那么我的程序就不会这样做了。
if(rs.next()){
rs.absolute(3);
FirstName3.setText(rs.getString("cFirstname"));
LastName3.setText(rs.getString("CLastname"));
MiddleName3.setText(rs.getString("cmiddlename"));
BufferedImage im3 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image3 = new ImageIcon(im3);
Image img3 = image3.getImage();
Image newImage3 = img3.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after3 = new ImageIcon(newImage3);
btnPic3.setIcon(after3);
btnPic3.setText("");
FirstName3.setVisible(true);
LastName3.setVisible(true);
btnPic3.setVisible(true);
MiddleName3.setVisible(true);
}
哪一行抛出 IllegalArgumentException?也许我过于简单化了,但一个简单的解决方案可能是您在该行之前立即检查空图像变量,如果该变量为空,则不要使用它,并跳过该行。更好的解决方案是找出图像为空的原因并首先防止这种情况发生。
结果代码应该是这样的
if(rs.next()){
rs.absolute(2);
FirstName2.setText(rs.getString("cFirstname"));
LastName2.setText(rs.getString("CLastname"));
MiddleName2.setText(rs.getString("cmiddlename"));
if(rs.getBinaryStream("cimage")!=null){
BufferedImage im2 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image2 = new ImageIcon(im2);
Image img2 = image2.getImage();
Image newImage2 = img2.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after2 = new ImageIcon(newImage2);
btnPic2.setIcon(after2);
btnPic2.setText("");}
else{
btnPic2.setText("No Picture");
}
FirstName2.setVisible(true);
LastName2.setVisible(true);
btnPic2.setVisible(true);
MiddleName2.setVisible(true);
}
添加 "if null" 语句。虽然在这个使用。我反转它。感谢您的评论和回答。我已经能够想出这个解决方案。
我在 java 和 MySQL 中有一个数据库程序。但是问题是:当SQL中IMAGE的数据为空时,程序停止加载图片。 它显示 "java.lang.IllegalArgumentException: input == null!"。我的问题是如何将图标图片设置为空并继续。
try{
PreparedStatement ps = conn.prepareStatement(President);
ResultSet rs = ps.executeQuery();
if(rs.next()){
rs.absolute(1);
FirstName1.setText(rs.getString("cFirstname"));
LastName1.setText(rs.getString("CLastname"));
MiddleName1.setText(rs.getString("cmiddlename"));
BufferedImage im1 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image1 = new ImageIcon(im1);
Image img1 = image1.getImage();
Image newImage = img1.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after = new ImageIcon(newImage);
btnPic1.setIcon(after);
btnPic1.setText("");
FirstName1.setVisible(true);
LastName1.setVisible(true);
btnPic1.setVisible(true);
MiddleName1.setVisible(true);
}
在我的数据中,此处存储的图像为空。
if(rs.next()){
rs.absolute(2);
FirstName2.setText(rs.getString("cFirstname"));
LastName2.setText(rs.getString("CLastname"));
MiddleName2.setText(rs.getString("cmiddlename"));
BufferedImage im2 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image2 = new ImageIcon(im2);
Image img2 = image2.getImage();
Image newImage2 = img2.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after2 = new ImageIcon(newImage2);
btnPic2.setIcon(after2);
btnPic2.setText("");
FirstName2.setVisible(true);
LastName2.setVisible(true);
btnPic2.setVisible(true);
MiddleName2.setVisible(true);
}
那么我的程序就不会这样做了。
if(rs.next()){
rs.absolute(3);
FirstName3.setText(rs.getString("cFirstname"));
LastName3.setText(rs.getString("CLastname"));
MiddleName3.setText(rs.getString("cmiddlename"));
BufferedImage im3 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image3 = new ImageIcon(im3);
Image img3 = image3.getImage();
Image newImage3 = img3.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after3 = new ImageIcon(newImage3);
btnPic3.setIcon(after3);
btnPic3.setText("");
FirstName3.setVisible(true);
LastName3.setVisible(true);
btnPic3.setVisible(true);
MiddleName3.setVisible(true);
}
哪一行抛出 IllegalArgumentException?也许我过于简单化了,但一个简单的解决方案可能是您在该行之前立即检查空图像变量,如果该变量为空,则不要使用它,并跳过该行。更好的解决方案是找出图像为空的原因并首先防止这种情况发生。
结果代码应该是这样的
if(rs.next()){
rs.absolute(2);
FirstName2.setText(rs.getString("cFirstname"));
LastName2.setText(rs.getString("CLastname"));
MiddleName2.setText(rs.getString("cmiddlename"));
if(rs.getBinaryStream("cimage")!=null){
BufferedImage im2 = ImageIO.read(rs.getBinaryStream("cimage"));
ImageIcon image2 = new ImageIcon(im2);
Image img2 = image2.getImage();
Image newImage2 = img2.getScaledInstance(144, 144, Image.SCALE_SMOOTH);
ImageIcon after2 = new ImageIcon(newImage2);
btnPic2.setIcon(after2);
btnPic2.setText("");}
else{
btnPic2.setText("No Picture");
}
FirstName2.setVisible(true);
LastName2.setVisible(true);
btnPic2.setVisible(true);
MiddleName2.setVisible(true);
}
添加 "if null" 语句。虽然在这个使用。我反转它。感谢您的评论和回答。我已经能够想出这个解决方案。