从数据库读取时,图像在JPanel中消失

时间:2014-03-09 14:45:42

标签: java swing jpanel blob

晚上好,

我有这部分代码:

我的问题是当我尝试显示BLOB类型的图像时。我正在使用Netbeans IDE和apach derby数据库。

像这样一切都很好,但是如果我删除了这行:JOptionPane.showMessageDialog(null, "hello");图像会快速消失并消失,

String req = "select * from viewpiece where idpiece = "+idpiece;
        myConnection = MyConnection.getMyConnection() ;
        ResultSet rs = myConnection.executeSQL(req);  

        try {   
            if (rs.next()) {

                TextFieldValeur.setText(rs.getString(2));
                TextFieldMonnaie.setText(rs.getString(5));
                TextFieldPays.setText(rs.getString(20));

                Blob Rectoblob = rs.getBlob(21);
                byte[] RectoByte = Rectoblob.getBytes(1, (int)(Rectoblob.length()));
                 try {
                    rectoBufferedImage = ImageIO.read(new ByteArrayInputStream(RectoByte));
                    g = panelImageRecto.getGraphics();

                   JOptionPane.showMessageDialog(null,  "hello");
                   g.drawImage(rectoBufferedImage, 10, 20,175,175, null);

                } catch (IOException ex) {
                    Logger.getLogger(PieceDetaillee.class.getName()).log(Level.SEVERE, null, ex);
                }

            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(rootPane, "Erreur recherche de details\n"+req);
        } 
问题在哪里?为什么显示消息 Hello 的那一行是一个解决方案?

有什么帮助吗?非常感谢你。

1 个答案:

答案 0 :(得分:2)

您的问题是您正在使用getGraphics()获取图形上下文,然后使用它绘图。此Graphics对象是短暂的,并不是在Swing GUI中绘制图像的安全方法。更好的方法是使用JVM为您提供的Graphics对象在JPanel的paintComponent方法中绘制图像。或者将其显示为JLabel中的ImageIcon。