Oie pessoal, tou com problemas pra exibir em um JInternalFrame uma imagem que retorno do meu banco de dados.Consigo carregar ela na tela quando alimento via caminho da imagem no meu disco mas quando construo um objeto do tipo Image e tento setar para um Label no JInternalFrame a coisa não funciona. vou postar os códigos da busca onde eu retorno o objeto e esse atributo que é vem como um array de bytes.
Aqui retorno do bancoconexao = new Conexao();
conexao.setAutoCommit(false);
sql = "select Codigo,Autor, Editora, Edicao, Numero, Duracao, Image, Formato From Multimidia_Tab where Numero= ?";
// prepare blob object from an existing binary column
pstmt = conexao.getConexao().prepareStatement(sql);
pstmt.setInt(1,numero);
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
multimidia = new Multimidia(rs.getInt(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getInt(5),
rs.getString(6),
rs.getString(8),
rs.getBytes(7));
mando preencher os campos de tela com o objeto recuperado
preencheCampos(multimidia);
o meu preenche campos alimenta os objetos na tela e carrega o JInternalFrame com uma imagem vinda no objeto e recuperada do banco
/**metodo que carrega na tela os dados da multimidia
*
* @param multimidia
*/
private void preencheCampos(Multimidia multimidia){
setNumero(multimidia.getNumero());
setCodigo(multimidia.getCodigo());
setAutor(multimidia.getAutor());
setEdicao(multimidia.getEdicao());
setEditora(multimidia.getEditora());
setDuracao(multimidia.getDuracao());
setFormato(multimidia.getFormato());
carregaImagem(Util.retornaImagemFromByteArray(multimidia.getImagem()));
}
public static Image retornaImagemFromByteArray(byte[] arrayByte){
Image image = null;
try {
image = Toolkit.getDefaultToolkit().createImage(arrayByte);
} catch (RuntimeException e) {
System.out.println("Util::retornaImagemFromByteArray::"+e);
}
return image;
}
private void carregaImagem(Image imagem) {
Image image = imagem;
String pathImagem = null;
if(image == null) {
pathImagem = Util.retornaArquivoSelecionado().getAbsolutePath();
if (pathImagem != null) {
image = Toolkit.getDefaultToolkit().getImage(pathImagem);
pathImagemLocal = pathImagem;
}
}
if(image != null){
ImageIcon icon = new ImageIcon(image);
JLabel label = null;
label = new JLabel(icon);
label.setSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
jInternalFrameImagem.setDefaultCloseOperation(jInternalFrameImagem.DISPOSE_ON_CLOSE);
jInternalFrameImagem.setMaximizable(true);
jInternalFrameImagem.setVisible(false);
jInternalFrameImagem.getContentPane().removeAll();
jInternalFrameImagem.getContentPane().repaint();
jInternalFrameImagem.setBounds(0, 0, label.getWidth(),label.getHeight());
jInternalFrameImagem.getContentPane().add(label);
jInternalFrameImagem.validate();
jInternalFrameImagem.repaint();
jInternalFrameImagem.setVisible(true);
}
}
Quando informo a imagem vinda do disco tudo ok, mostra legal, porém vindo do banco tá se quebrando. Peço ajuda pois ão tou conseguindo achar solução. Obs : Criar um arquivo no disco com os bytes vindos do banco e depois jogar na tela não é uma solução :( O professor não vai aceitar.