2012-11-20 22 views
0

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

enter image description here

任何想法?

我的代码是:

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(); 
        } 

       } 

     }); 
+0

你没有说你正在使用的是哪个版本的MySQL,但是加载图像的应用程序或MySQL对BLOB的大小有限制。 –

+0

版本5.1.36,引擎MyISAM –

回答

0

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

所以问题来自列类型。

0

这太疯狂了。我从来没有见过它。看起来像对话框需要刷新/重绘或类似的。

你可以试试这个:

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() { 
     d.pack(); 
    }  
} 
相关问题