我有这部分代码:
我的问题是当我尝试显示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 的那一行是一个解决方案?
有什么帮助吗?非常感谢你。
答案 0 :(得分:2)
您的问题是您正在使用getGraphics()
获取图形上下文,然后使用它绘图。此Graphics对象是短暂的,并不是在Swing GUI中绘制图像的安全方法。更好的方法是使用JVM为您提供的Graphics对象在JPanel的paintComponent方法中绘制图像。或者将其显示为JLabel中的ImageIcon。