第一次发帖,希望得到一些帮助。我在这个论坛上经历了所有类似的帖子......并且相信代码过去是正确的,但是它会继续返回nullpointerException。该程序是一个简单的员工数据库,输入员工详细信息和图片。这样工作正常,可以将图像插入mySql中的blob字段没问题。但是,我根本无法在JLabel中检索和显示。
以下代码是程序的最后一部分,用户只需插入员工姓名即可检索所有详细信息。搜索功能如下:
void search(){
try {
st = cn.createStatement();
byte[] imageBytes;
Image image;
ResultSet rs=st.executeQuery("SELECT * FROM info WHERE pname='"+ txtSearch.getText() + "'");
if(rs.next()){
txtName.setText(rs.getString("Pname").toString());
if (rs.getString("sex").toString().equals("Male")){
cboGender.setSelectedIndex(0);
}else{
cboGender.setSelectedIndex(1);
}
txtAddress.setText(rs.getString("address").toString());
txtPosition.setText(rs.getString("position").toString());
txtSecurityLvl.setText(rs.getString("security").toString());
try {
String sql = ("select photograph from info where pname ='" + txtSearch.getText() + "'");
ps = cn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
byte[] imagedata= rs.getBytes("photograph");
format=new ImageIcon(imagedata);
picLabel2.setIcon(format);
}
} catch (Exception e) {
e.printStackTrace();
}
/*
try {
BufferedImage img = ImageIO.read(rs.getBinaryStream("photograph"));
picLabel.setIcon(new ImageIcon(img));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//picLabel.setIcon(new ImageIcon(ByteStreams.toByteArray(Blob.getBinaryStream())));
*/
}else{
JOptionPane.showMessageDialog(null,"Not Found",null, JOptionPane.INFORMATION_MESSAGE, null);
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
非常感谢任何帮助,这应该是一项简单的任务,但已经看了很长时间,以至于我无法看到它。谢谢!
* nb- mySql Db表是'info',包含blob的列是'photograph'
更新:程序应使用名称,地址等填充相应的文本字段,并在相应的标签中显示员工照片。填充了文本字段,但程序在此行崩溃:picLabel2.setIcon(format);返回nullPointerException()**第630行
答案 0 :(得分:0)
您尚未初始化picLabel2
。 (从错误来看)
在picLabel2.setIcon(format);
以上的某处,您需要执行以下操作:
JLabel picLabel2 = new JLabel();
您可能还想在标签上设置文字,如果需要,则可以:
String
传递。picLabel2.setText(string)
。