0

我与 MySQL 数据库建立了连接,我尝试解决从数据库中提取的 blob(图像)未正确呈现到 JDialog 时出现的问题(参见屏幕截图)。注意:我有多个图像(大小 ~50-60 Kb),其中一些显示正确(完整),但其中一些显示未完全加载。我尝试重新保存图像并将其插入 MySQL,但问题仍然存在。

在此处输入图像描述

有任何想法吗?

我的代码是:

MenuItemPhoto.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

                    try {
                        String sql = "select photo from RDSSPhoto where id ='38'";
                        pst = conn.prepareStatement(sql);
                        rs = pst.executeQuery();

                        if (rs.next()) {

                            byte[] imagedata = rs.getBytes("photo");
                            format = new ImageIcon(imagedata);
                            JOptionPane pane = new JOptionPane((Frame) null, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);

                            JDialog d = pane.createDialog((Frame) null, "Photo");

                            pane.setIcon(format);
                            if (!d.isVisible()) {
                                d.setLocationRelativeTo(RDSSView.this);
                                d.pack();
                            }

                            d.setVisible(true);

                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

        });
4

2 回答 2

0

太疯狂了。我以前从未见过它。看起来对话框需要刷新/重绘或类似的东西。

你可以试试这个:

SwingUtilities.invokeLater(new Runnable()
{
   public void run() {
      d.pack();
   }     
}
于 2012-11-20T16:16:58.463 回答
0

喝了一杯完美的咖啡后,我发现了我的问题。存储图像的 MySQL 列设置为BLOB,这意味着每行最多可以存储 65535 字节(〜最大 64 Kb)。在我将该列更改为 LONGBLOB 后,问题仍然存在。但是在我再次将图像插入数据库后,JDialog 看起来很棒。

所以问题出在列类型上。

于 2012-11-20T19:13:58.027 回答