【问题标题】:Cannot retrieve blob data and display in JLabel- mySql无法检索 Blob 数据并在 JLabel-mySql 中显示
【发布时间】:2013-12-07 17:33:46
【问题描述】:

第一次发帖,希望对大家有所帮助。我已经浏览了这个论坛上所有类似的帖子......并且相信代码曾经是正确的,但是它继续返回 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 行

【问题讨论】:

  • 您的程序中究竟有什么没有按预期发生?请指出行号/引用真正问题所在的一些行。
  • java.lang.NullPointerException at test.search(test.java:630) at test$7.mouseClicked(test.java:521) at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source) at java .awt.Component.processMouseEvent(未知来源)
  • 程序应该用姓名、地址等填充相应的文本字段,并在相应的标签中显示员工照片。文本字段已填充,但程序在此行崩溃: picLabel2.setIcon(format);返回一个 nullPointerException
  • 您能用所要求的信息更新您的问题吗?在评论中看起来更好......我看到它在第 630 行的搜索方法中,但是我不知道第 630 行是什么。

标签: java mysql image swing inputstream


【解决方案1】:

你还没有初始化picLabel2。 (从错误来看)

picLabel2.setIcon(format); 上方的某处,您需要执行以下操作:

JLabel picLabel2 = new JLabel();

您可能还想在标签上设置文本,如果需要,您可以:

  • 在构造函数中将其作为String 传递。
  • 致电picLabel2.setText(string)

【讨论】:

  • 谢谢skiwi,我已经初始化了JLabel,程序不再崩溃,文本字段被正确填充,但是仍然没有显示员工图像:(
  • 根据文档 .setIcon() 方法将不会显示任何内容,如果传递了一个空值......你能建议一种方法来测试是否正在接收一个值......?谢谢
  • 我的大脑是碎的......对不起......正在接收一个值:javax.swing.ImageIcon@4be3b5e0 ...那为什么它没有被显示?谢谢
  • Creates an ImageIcon from an array of bytes which were read from an image file containing a supported image format, such as GIF, JPEG, or (as of 1.3) PNG. 您的图像格式是其中之一吗?或者你的图片格式到底是什么?
  • 图片文件为.jpg,大小为16kb,mysql列的格式为longblob...所以应该没问题...
猜你喜欢
  • 2013-12-24
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2012-01-09
  • 2023-03-09
相关资源
最近更新 更多