Boa tarde. Sou novo no fórum, aliás, nunca mexi em fórum, portanto nem sei como utilizar direito.
Se eu estiver repetindo a pergunta, me desculpem, mas procurei e não achei resposta pra minha dúvida nem aqui e nem em lugar nenhum na internet.
Então vamos a dúvida:
Criei um projeto Java para Desktop onde eu manipulo dados dos filmes que tenho no HD Externo, usando Hibernate e Mysql.
Dados como: Nome, Ano de Lançamento, Sinopse … e a Capa, portanto uma imagem, no caso em jpg.
Nesta aplicação, eu Cadastro(Tela(JFrame) à parte), Edito(Tela(JFrame) à parte), Deleto, Mostro na Tabela(Tela(JFrame) à parte), e mostro numa tela a parte também, chamada Sinopse, apenas o Nome, a Sinopse e a Capa.
A Capa do Filme, eu mostro num JLabel, em todas as telas, Cadastrar, Editar e Sinopse, usando o JFileChooser.
Tudo funciona normal, menos na parte de Editar, quando por exemplo, eu vou alterar só o Nome do Filme, então ou seja, não mudei a imagem, ai ao clicar em salvar para efetivar o update, a aplicação não salva, da uma Exceção, a famosa NullPointerException, pois não encontra o Path, ou seja, o endereço da imagem. Quando eu mudo a imagem, ai encontra o endereço e salva certinho.
Vou postar abaixo alguns códigos para ver se vocês conseguem me ajudar.
- Função Editar - que fica no menu da minha tela Principal:
private void itemEditarActionPerformed(java.awt.event.ActionEvent evt) {
// ITEM EDITAR
// verificar se algum filme foi selecionado ou não na tabela
// se foi, a tela de edição será apresentada
if( jTable1.getSelectedRow( ) != -1 ) {
int linhaSelecionada = jTable1.getSelectedRow( );
String cod = jTable1.getValueAt( linhaSelecionada, 0 ).toString( );
String nome = jTable1.getValueAt( linhaSelecionada, 1 ).toString( );
String lancamento = jTable1.getValueAt( linhaSelecionada, 2 ).toString( );
String genero = jTable1.getValueAt( linhaSelecionada, 3 ).toString( );
String duracao = jTable1.getValueAt( linhaSelecionada, 4 ).toString( );
String nota_imdb = jTable1.getValueAt( linhaSelecionada, 5 ).toString( );
String qualidade = jTable1.getValueAt( linhaSelecionada, 6 ).toString( );
String resolucao = jTable1.getValueAt(linhaSelecionada, 7 ).toString( );
String formato = jTable1.getValueAt( linhaSelecionada, 8 ).toString( );
String tamanho = jTable1.getValueAt( linhaSelecionada, 9 ).toString( );
String sinopse = jTable1.getValueAt( linhaSelecionada, 10 ).toString( );
List<Filme> listaDeFilmes = metodos.ListarFilmes( );
byte[] capa = listaDeFilmes.get(linhaSelecionada).getCapa( );
try {
// redirecionar
new Tela_Editar( this, true, cod, nome, lancamento, genero, duracao, nota_imdb, qualidade, resolucao, formato, tamanho, sinopse, capa ).setVisible(true);
}
catch ( ParseException ex ) {
Logger.getLogger( Tela_Principal.class.getName( ) ).log( Level.SEVERE, null, ex );
}
// apaga a seleção feita na tabela
jTable1.clearSelection( );
// atualizar tabela
MostrarFilmesNaTabela( );
}
else {
// informação
JOptionPane.showMessageDialog( null, "Primeiro selecione um filme na tabela !" );
}
}
- Botão Salvar da minha tela Editar:
private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
// BOTÃO SALVAR
if( campoNome.getText( ).equals( "" ) || campoLancamento.getText( ).trim( ).length( ) != 4 || ( campoGenero.getSelectedItem( ) == null ) || campoDuracao.getText( ).trim( ).replace( " ", "" ).length( ) != 7 || campoNota.getText( ).trim( ).length( ) != 3 || ( campoQualidade.getSelectedItem( ) == null ) || campoResolucao.getText( ).trim( ).length( ) != 9 || ( campoFormato.getSelectedItem( ) == null ) || campoTamanho.getText( ).trim( ).replace( " ", "" ).length( ) != 6 || campoSinopse.getText( ).equals( "" ) || labelCapa.getIcon( ) == null ) {
// informação
informacaoEditar.setForeground( Color.RED ); // cor do texto do jLabel quando aparecer a mensagem abaixo
informacaoEditar.setText( "| Preencha todos os campos ! |" );
}
else {
if( enderecoDaCapa != null ) {
Filme filme = new Filme( );
filme.setCod( Integer.parseInt( cod ) );
filme.setNome( campoNome.getText( ) );
filme.setLancamento( Integer.parseInt( campoLancamento.getText( ) ) );
Genero genero = new Genero( );
genero.setGenero( campoGenero.getSelectedItem( ).toString( ) );
filme.setGenero( genero );
filme.setDuracao( campoDuracao.getText( ) );
filme.setNota_imdb( campoNota.getText( ) );
Qualidade qualidade = new Qualidade( );
qualidade.setQualidade( campoQualidade.getSelectedItem( ).toString( ) );
filme.setQualidade( qualidade );
filme.setResolucao( campoResolucao.getText( ) );
Formato formato = new Formato( );
formato.setFormato( campoFormato.getSelectedItem( ).toString( ) );
filme.setFormato( formato );
filme.setTamanho( campoTamanho.getText( ) );
filme.setSinopse( campoSinopse.getText( ) );
try {
File f = new File(enderecoDaCapa);
FileInputStream fis;
fis = new FileInputStream(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream( );
byte[] novoArray = new byte[1024];
for( int ler; ( ler = fis.read(novoArray) ) != -1; ) {
baos.write( novoArray, 0, ler );
}
arrayDeBytes = baos.toByteArray( );
filme.setCapa(arrayDeBytes);
} catch ( FileNotFoundException ex ) {
Logger.getLogger(Tela_Cadastrar.class.getName()).log(Level.SEVERE, null, ex);
} catch ( IOException ex ) {
Logger.getLogger(Tela_Cadastrar.class.getName()).log(Level.SEVERE, null, ex);
}
Metodos metodos = new Metodos( );
// executar metodo editar
metodos.Editar(filme);
// informação
informacaoEditar.setForeground( new Color( 34, 139, 34 ) ); // cor do texto do jLabel quando aparecer a mensagem abaixo
informacaoEditar.setText( "| Filme editado com sucesso ! |" );
} else {
System.out.println(enderecoDaCapa);
}
}
}
- Ao clicar no JLabel da Tela Editar:
private void labelCapaMouseClicked(java.awt.event.MouseEvent evt) {
// JLABEL PARA SELECIONAR CAPA
JFileChooser janelaParaSelecionarCapa = new JFileChooser( );
janelaParaSelecionarCapa.setFileFilter( new FileNameExtensionFilter( "Imagens em JPEG e PNG", "png", "jpg", "jpeg" ) );
janelaParaSelecionarCapa.setAcceptAllFileFilterUsed(false);
janelaParaSelecionarCapa.setDialogTitle( "Selecione uma Capa:" );
janelaParaSelecionarCapa.showOpenDialog(this);
if( janelaParaSelecionarCapa.getSelectedFile( ) != null ) {
File f = janelaParaSelecionarCapa.getSelectedFile( );
enderecoDaCapa = f.getAbsolutePath( );
ImageIcon icone = new ImageIcon( new ImageIcon(enderecoDaCapa).getImage( ).getScaledInstance( 171, 252, 0 ) );
labelCapa.setIcon(icone);
}
}
- Método Editar, em Hibernate, da minha classe de métodos:
public void Editar( Object o ) {
sessao = HibernateUtil.getSessionFactory( ).openSession( );
sessao.beginTransaction( ).begin( );
sessao.update(o);
sessao.getTransaction( ).commit( );
sessao.close( );
}
Enfim, é isso, espero que alguém possa me ajudar. É um projeto que fiz em 2013, ai esse ano decidi finalizá-lo implementando essa nova função da Capa do Filme.
Agradeço desde já a ajuda.