我在公司内部使用了基于java的epos系统,目前正在编写一系列用于后台/仓库的Java应用程序。我当前项目的目的是从MYSQL中提取一个Image(保存为blob)和一个title(varchar值),并在JPanel中的JLabel上显示每个。
首先,在一个名为DataLogic的类中处理sql查询,如下所示:
public class DataLogic {
MySQLConnect mysqlConnect = new MySQLConnect();
private Connection connect = null;
private PreparedStatement preparedStatement = null;
public ResultSet getCategories(){
try {
connect = mysqlConnect.connDatabase();
preparedStatement = connect.prepareStatement("SELECT image, name, texttip from CATEGORIES ORDER BY name");
ResultSet resultSet = preparedStatement.executeQuery();
return resultSet;
} catch (Exception e){
}
return null;
}
}
你可以看到get Categories函数返回一个ResultSet,它在一个名为GuiEvents的类的populateCats()函数中使用,其相关部分如下:
public void populateCats(){
results = dataLogic.getCategories();
try{
int count = 0;
while (results.next()) {
++count; // Get data from the current row and use it
}
results.first();
while (results.next()){
GridLayout catLayout = new GridLayout(count,2);
System.out.println(count);
gui.catList.setLayout(catLayout);
JLabel catLabel = new JLabel(results.getString(2));
JLabel imgLabel = new JLabel();
imgLabel.setIcon(displayImage(results.getBytes(1)));
gui.catList.add(imgLabel);
gui.catList.add(catLabel);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public ImageIcon displayImage(byte[] bytes) {
Image img = Toolkit.getDefaultToolkit().createImage(bytes);
// new code
int imgHeight = img.getHeight(null);
int imgWidth = img.getWidth(null);
int newHeight = imgHeight / 2;
int newWidth = imgWidth / 2;
//System.out.println(imgHeight + "," + imgWidth);
Image resizedImg = img.getScaledInstance(40,40,Image.SCALE_SMOOTH );
//end new code
ImageIcon icon = new ImageIcon(resizedImg);
return icon;
}
我的问题是虽然它编译并运行但我在netbeans中得到以下错误:
java.lang.NullPointerException
at java.awt.Toolkit.createImage(Toolkit.java:1111)
at gapricing.app.first.GuiEvents.displayImage(GuiEvents.java:48)
at gapricing.app.first.GuiEvents.populateCats(GuiEvents.java:39)
at gapricing.app.first.Gui.<init>(Gui.java:111)
at gapricing.app.first.Main.main(Main.java:6)
虽然图像和标题中的29个完全按照我希望的方式显示,但是尽管由于gridlayout,但是在JPanel的底部还包含9个空盒子。 任何人都可以帮忙吗?
答案 0 :(得分:1)
谢谢大家,是的,数据库中缺少一个图像 简单编辑:
if (results.getBytes(1) != null){
imgLabel.setIcon(displayImage(results.getBytes(1)));
}
如果bytes为null,则只显示空标签。非常感谢