У меня есть система epos на основе Java, используемая в моей компании, и в настоящее время я пишу серию приложений Java для использования в бэк-офисе/на складе. Цель моего текущего проекта - извлечь изображение (сохраненное как blob) и заголовок (значение varchar) из MYSQL и отобразить каждый из них в JLabels в JPanel.Java/MySQL исключение пустой указатель на полпути через набор результатов
Первый запрос SQL обрабатывается в классе под названием DataLogic так:
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;
}
}
AS вы можете увидеть функцию получить Категории возвращает ResultSet, который используется в populateCats() функция класса называется GuiEvents , соответствующая часть которого находится ниже:
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 изображений и заголовков отображаются точно так же, как мне хотелось бы, чтобы повторное воспроизведение 9 не было, хотя благодаря gridlayout 9 пустых ящиков включены в нижней части JPanel. Может ли кто-нибудь помочь PLS ??
Похоже, что 'bytes' может быть пустым. –
согласны с тем, что байты равны нулю. Попробуйте добавить «WHERE image NOT NULL» на ваш SQL и посмотреть, как это помогает – Stan
спасибо, ребята, да, из db отсутствует изображение. – danparker