Erro com Imagem

Boas. Eu tenho uma tabelas com informacoes de produto e alguns tens imgens e quando carrego num produto mostra(se tiver) a imagem ao lado numa label. O meu problema é quando um produto nao tem imagem dá-me um erro: java.lang.NUllPointerException. O codigo esta assim:

[code]try{

     String sql="select descricao_material,nome_fornecedor,quantidade, imagem from material where descricao_material = '"+Table_click+"'";
     pst=con.prepareStatement(sql);
     rs=pst.executeQuery();
        if(rs.next()){
              
            String add1= rs.getString("descricao_material");
            jTextField2.setText(add1);
            
            String add2= rs.getString("nome_fornecedor");
            jTextField3.setText(add2);
            
            String add3= rs.getString("quantidade");
            jTextField4.setText(add3);
            
            byte[]imagedata= rs.getBytes("imagem");
            format= new ImageIcon(imagedata);
            jLabel2.setIcon(format);
            
        }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }[/code]

Quando receber a informação do banco na sua variável imagedata, verifica se ela está ou não igual a null.


byte[]imagedata= rs.getBytes("imagem");  
if(imagedata != null) {
   format= new ImageIcon(imagedata);  
   jLabel2.setIcon(format);  
}

Talves isto funcione !

Deu, muito obrigado, quando carregava fazia o que era suposto mas dava este erro devido à imagem. E é por isso que tenho mais uma duvida, há alguma maneira de fazer se um produto nao tem uma imagem a label fica vazia ou seja nao aparece nada e quando o produto tem aparece??

O código para deixar invisível é

jLabel2.setVisible(false); 

Agora vc só precisa criar uma lógica, verifique se contém a imagem, ae você define se a label deve ou não ser exibida.

Este bocado de código nao devia fazer isso??:

[code]byte[]imagedata= rs.getBytes(“imagem”);
if(imagedata!=null){
format= new ImageIcon(imagedata);
jLabel2.setIcon(format);

            }
            
            
            else if(imagedata==null){
                jLabel2.setVisible(false);
                
            }[/code]

Quando no inicio carrego numa que tem imagem, aparece tudo bem e quando carrego numa que nao tem a imagem desaparece mas depois quando volto a carregar numa que tem ja nao aparece nada.

[quote=modern]Este bocado de código nao devia fazer isso??:

[code]byte[]imagedata= rs.getBytes(“imagem”);
if(imagedata!=null){
format= new ImageIcon(imagedata);
jLabel2.setIcon(format);

            }
            
            
            else if(imagedata==null){
                jLabel2.setVisible(false);
                
            }[/code]

[/quote]

Aí depende amigão, na teoria deveria funcionar, mas nem toda teoria da certo na prática.

Com esse código que postou, não da pra saber muita coisa de como estas programando. Somente notei que você misturou um pouco as camadas (Visualização e Persistência em uma única classe).

Tenta fazer esse teste em modo debug, vc terá mais visão do que está acontecendo, qualquer coisa posta alguns códigos mais detalhados que talvez possamos te ajudar.

Está a correr tudo bem, quando chamo os produtos que tem imagens nao tou a ver erro nenhum, o problema é que ela nao aparece. O que acha que eu deva fazer??

Afinal, terá ou não problemas ??? está ocorrendo tudo bem quando os produtos tem imagem, mas depois tem problema pq não aparece ?

Não entendi.

Posta a classe onde você instanciou essa Label.

quer que meta a classe toda??

Eu apenas chamo a jLabel2 (que pertence à public class pagprincipal extends javax.swing.JFrame) aqui:

[code]private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
int row = jTable1.getSelectedRow();
String Table_click= (jTable1.getModel().getValueAt(row,0).toString());

     try{
     
     String sql="select descricao_material,nome_fornecedor,quantidade, imagem from material where descricao_material = '"+Table_click+"'";
     pst=con.prepareStatement(sql);
     rs=pst.executeQuery();
        if(rs.next()){
              
            String add1= rs.getString("descricao_material");
            jTextField2.setText(add1);
            
            String add2= rs.getString("nome_fornecedor");
            jTextField3.setText(add2);
            
            String add3= rs.getString("quantidade");
            jTextField4.setText(add3);
            
            byte[]imagedata= rs.getBytes("imagem");
           
            if(imagedata!=null){
            format= new ImageIcon(imagedata);
            jLabel2.setIcon(format);
            
            }
                else if(imagedata==null){
                
                jLabel2.setVisible(false);
                
            }
            
        }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
     
     int linha = jTable1.getSelectedRow();
     String Table= (jTable1.getModel().getValueAt(linha,0).toString());
    
    
     try{
     
     String sql="select descricao_material,nome_fornecedor,quantidade from material where descricao_material = '"+Table+"'";
     pst=con.prepareStatement(sql);
     rs=pst.executeQuery();
        if(rs.next()){
              
            String add1= rs.getString("descricao_material");
            jTextField6.setText(add1);
                  
            String add2= rs.getString("quantidade");
            jTextField7.setText(add2);
            
          
            
        }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }

} [/code]

E depois tenho estas variaveis declaradas pertencentes à imagem:

public ImageIcon format=null; String filename=null; int s=0; byte[] person_image=null;