2015-05-12 5 views
0

У меня есть система 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 ??

+0

Похоже, что 'bytes' может быть пустым. –

+0

согласны с тем, что байты равны нулю. Попробуйте добавить «WHERE image NOT NULL» на ваш SQL и посмотреть, как это помогает – Stan

+0

спасибо, ребята, да, из db отсутствует изображение. – danparker

ответ

1

спасибо, ребята, да, отсутствует изображение из db.
Простой редактирование:

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

Если байты равны нулю это только dispalys пустой ярлык. Спасибо alot

Смежные вопросы