结果集中途的Java / MySQL空指针异常

时间:2015-05-12 14:34:20

标签: java mysql nullpointerexception resultset

我在公司内部使用了基于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个空盒子。 任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

谢谢大家,是的,数据库中缺少一个图像 简单编辑:

if (results.getBytes(1) != null){
imgLabel.setIcon(displayImage(results.getBytes(1)));
}

如果bytes为null,则只显示空标签。非常感谢