2015-01-17 30 views
-2

其实我从来没有像这样的问题,但这次它让我感到不舒服。java程序崩溃时找不到合适的匹配

该程序从用户处获取文本字段,并从PostgreSQL的SQL中搜索正确的匹配。它工作正常,但是当我输入不在数据库中的东西时,程序崩溃或发生了什么,我的意思是它没有响应任何事情。如果这里可能有帮助的是代码的相关部分:

public void actionPerformed(ActionEvent e) 
{ 
    String path = null; 
    JButton clicked = (JButton) e.getSource(); 
    if (clicked == loadButton) { 
     try { 
      PreparedStatement st = connect.prepareStatement("select * from databank where code=?"); 
      st.setString(1, field.get(0).getText()); 
      ResultSet rs = st.executeQuery(); 
      while (rs.next()) { 
       for (int i = 0; i < field.size(); i++) { 
        if (i < 7) 
         field.get(i).setText(rs.getString(i + 1)); 
        else if (i > 6 && i < 10) 
         field.get(i).setText(Double.toString(rs.getDouble(i + 1))); 
        else if (i > 9 && i < 14) 
         field.get(i).setText(Integer.toString(rs.getInt(i + 1))); 
        else if (i > 13) 
         field.get(i).setText(rs.getString(i + 1)); 
        path = rs.getString(15); 
       } 
      } 
      rs.close(); 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
      JOptionPane.showMessageDialog(null, "Error Code = 0020"); 
     } finally { 
      imageHold.setIcon(new ImageIcon(path)); 
      SwingUtilities.updateComponentTreeUI(frame); 
      SwingUtilities.updateComponentTreeUI(imageHold); 
     } 
    } 
} 

我在想什么?我该如何解决这个问题?

编辑:

这是堆栈跟踪。

Uncaught error fetching image: 
java.lang.NullPointerException 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:101) 
    at sun.awt.image.FileImageSource.getDecoder(FileImageSource.java:53) 
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263) 
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205) 
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169) 
+2

任何堆栈跟踪? – roeygol

+0

并且还指示哪条线路导致异常。请尽量使这个问题尽可能完整和可回答。 –

+2

'updateComponentTreeUI'没有做你认为的事情,应该永远不要用它来执行UI状态的基本更新,效率很低 – MadProgrammer

回答

1

我有固定的问题,当我的image列是我的数据库空,

imageHold.setIcon(新的ImageIcon(路径));

这使得空指针异常。

而我所做的:

if(path != null) 
    imageHold.setIcon(new ImageIcon(path)); 

和问题就解决了。

+1

实际上,您的代码有可能会使资源处于打开状态并降低程序的效率,请参阅[在此帖子中](http://stackoverflow.com/questions/27977123/db2-and-java-adding-data-to- database-through-gui/27977211#27977211)了解更好的资源管理的更多信息... – MadProgrammer