[Resolvido] Problema com cache de Imagem ao substituir

8 respostas
W

Boa tarde!!
Meu primeiro post no GUJ

Estou com um problema que não está tendo solução até o momento
Tenho um Jframe de cadastro de usuário.
Esse JFrame é um controle de usuários com imagem 32x32 png foto.
Ná hora da inserção tudo normal, pois guardo a path no banco e quando preciso busco novamente no banco o path, e instâncio na label

Dúvida
O problema é na hora da Alteração.(substituir o arquivo na minha pasta imagens do programa)
pelo JFileChosser busco a imagem, coloco num label, ao clicar em alterar quero qe ele substitua o arquivo antigo do usuario e já fique disponível.
Até consigui fazer, excluindo o arquivo velho, importando a classe CompareTo() da Api FileChannel recebendo o path do arquivo novo e o lugar onde ele vai substituir o arquivo por parametro, mas ao referenciar o path no label depois de pronto, ele mostra a imagens antiga ainda em cache.

Obs: ao acessar pelo windows a mudança foi executada

Espero ter explicado corretamente. Vou deixar a classe de alteração

File fileAntigo = new File("src"+usuario.getImagenUrl);                     
                           //Retira a imagem da label
                            frameCadastroUsuario.getLblFoto().setIcon(null);
                            //Deleta o imagem
                            fileAntigo.delete();
                            //Nova imagem do usuario
                            File origem = new File(frameCadastroUsuario.getTxtUrl().getText());
                            //Destino é nome da imagem
                            File destino = new File("src/imagens/"+usuario.getUsuario()+".png");
                            FileInputStream   fisOrigem = null;
                            FileOutputStream fisDestino = null;
                            try 
                            {
                                fisOrigem = new FileInputStream(origem);
                                fisDestino = new FileOutputStream(destino);
                            }
                            catch(FileNotFoundException ex)
                            {
                                Logger.getLogger(PegarCaminhoArquivo.class.getName()).log(Level.SEVERE, null, ex);
                            }
                                FileChannel fcOrigem = fisOrigem.getChannel();
                                FileChannel fcDestino = fisDestino.getChannel();
                            try
                            {
                               //Copiando a nova imagem do usuario para o destino     Pasta imagens
                                fcOrigem.transferTo(0, fcOrigem.size(), fcDestino);
                           
                                fisOrigem.close();
                                fisDestino.close();
                            }
                            catch(IOException ex)
                            {
                                Logger.getLogger(ActionInserirUsuario.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            }

8 Respostas

W

up

daveiga

welton, eu nunca vi cache nesse caso, se você tentar uma imagem com nome diferente, esse refresh da mesma maneira, funciona?

W

Exatamente, funciona normalmente. Somente quando é o mesmo path

W

up
Alguem já fez um sistema com imagens aee?
Alguém pode passar outra api para substituir imagens?

E

Cara, pra caso de imagens, eu prefiro usar a API ImageIO direto mesmo, ao invés de usar esses streams:

imagem = ImageIO.read(fileAntigo);
ImageIO.write(imagem,"png", file);
W

Vou testar a noite e ver se da certo…

Muito abrigado a todos por enquanto e retorno se der certo ou não.

W

Problema não resolvido

Continua apontando para a imagem que não existe mais mesmo excluindo antes.

estou referenciando no label assim.

ActionMostrarNaTela()

frameCadastroUsuario.getLblFoto().setIcon(new ImageIcon(getClass().getResource(usuario.getImagenFoto())));

Será mesmo alguém tem uma explicação para isso?

W

Agradeco a to dos que ajudaram…

Problema resolvido…

na hora de referenciar a imagem do usuario fiz assim.

frameCadastroUsuario.getLblFoto().setIcon(new ImageIcon(ImageIO.read(file)));
Somente isso

Criado 21 de setembro de 2011
Ultima resposta 24 de set. de 2011
Respostas 8
Participantes 3