JLabel.setIcon: Não pinta (atualiza) a nova imagem

Pessoal,

Estou desenvolvendo um visualizador de imagens usando J2SE (swing).
Imaginem a seguinte situação: Tenho 2 arquivos: “ImagemA.jpg” e “ImagemB.jpg”.
Tenho um JFrame principal e um JLabel responsável por carregar as imagens. Quando pressiono a tecla “seta para esquerda”, o JLabel apresenta o arquivo “ImagemA.jpg” e quando pressiono a tecla “seta para direita”, o JLabel apresenta o arquivo “ImagemB.jpg”.

Agora vem o problema, imaginem que em um momento minha aplicação pega um novo arquivo “ImagemC.jpg” e renomeia para “ImagemB.jpg”. Portanto o arquivo “ImagemB.jpg” antigo não existe mais, correto?
Só que quando pressiono a tecla “seta para direita”, o JLabel continua apresentando a imagem antiga do arquivo “ImagemB.jpg”. É como se ele não atualizasse algum cache.
Já tentei reinstanciar o JLabel, remover do container e colocar novamente, mas… nada!

Por favor, façam o teste. É muito simples. Basta pegarem qualquer arquivo de imagem JPG (3 arquivos) e fazerem o procedimento:
Seta esquerda: Mostra imagem1
Seta direita: Mostra imagem2
Sem fechar a aplicação, acessem o windows explorer, e renomeie o arquivo imagem3 para imagem2.
Seta direita: Continua mostrando arquivo imagem2 antigo!
Detalhe: Se fechar a aplicação e abri-la novamente, aí ele atualiza!

Se alguém souber como resolver isso, por favor me ajudem.
Segue abaixo um pequeno código de exemplo.

import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class ImagemPaginador extends JFrame {
	
	private JLabel lblImagem = new JLabel();
	
	public ImagemPaginador() {
		
		initComponents();
	}
	private void initComponents() {

        //key UP
		addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                teclaSubiu(evt);
            }
        });
		
		lblImagem.setBounds(0,0,800,600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800, 600);
		// centralizar Dialog
		setLocationRelativeTo(null);
		getContentPane().add(lblImagem);
		
	}
	private void teclaSubiu(java.awt.event.KeyEvent evt) {
	
		int code = evt.getKeyCode();

		//Se pressionar tecla >, muda!
		if (code == KeyEvent.VK_RIGHT){
			
			lblImagem.setIcon(new ImageIcon("/home/user/teste/imagem2.jpg"));
		}
		
		//Se pressionar tecla <, pagina!
		else if (code == KeyEvent.VK_LEFT) {
			
			lblImagem.setIcon(new ImageIcon("/home/user/teste/imagem1.jpg"));
		}
	}
	
	public static void main(String[] args) {
		
            java.awt.EventQueue.invokeLater(new Runnable() {
    		
              public void run() {
                  new ImagemPaginador().setVisible(true);
              }
            });
	}
}

Eu fiz com um jeitinho brasileiro, depois tu arruma:

import javax.swing.JProgressBar;


import java.awt.Image;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class teste extends JFrame {
    
    private JLabel lblImagem = new JLabel();
    private ImageIcon imagem1;
    private ImageIcon imagem2;
    
    public teste() {
        
        initComponents();
    }
    private void initComponents() {

        //key UP
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                teclaSubiu(evt);
            }
        });
        
        lblImagem.setBounds(0,0,800,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);
        // centralizar Dialog
        setLocationRelativeTo(null);
        getContentPane().add(lblImagem);
        
    }
    private void teclaSubiu(java.awt.event.KeyEvent evt) {
    
        int code = evt.getKeyCode();

        //Se pressionar tecla >, muda!
        if (code == KeyEvent.VK_RIGHT){            
            
            imagem2 = new ImageIcon("C:\\imagem2.jpg");
            Image aux = imagem2.getImage();
            aux.flush();
            lblImagem.setIcon(new ImageIcon(aux));
            imagem2 = null;
        }
        
        //Se pressionar tecla <, pagina!
        else if (code == KeyEvent.VK_LEFT) {
            
            imagem1 = new ImageIcon("C:\\imagem1.jpg");            
            Image aux = imagem1.getImage();
            aux.flush();
            lblImagem.setIcon(new ImageIcon(aux));
            imagem1 = null;
        }
    }
    
    public static void main(String[] args) {
        
            java.awt.EventQueue.invokeLater(new Runnable() {
            
              public void run() {
                  new teste().setVisible(true);
              }
            });
    }
}

[quote=ivo costa]Eu fiz com um jeitinho brasileiro, depois tu arruma:
[/quote]

Caramba, e não é que está funfando mesmo!!!

Valeu carinha, quebrou um galhão mesmo!

Valeu pela post. Ajudou muito!

só pra constar…

fiz conforme as dicas aqui e não funcionou…

então pesquisando… achei a solução:

ImageIcon valid = new ImageIcon(getClass().getResource("../imagens/valid_8.png"));
this.jLabel.setIcon(valid);

e pelo que entendi… o path fica assim:

…/package/file

ou

root/pacote ou pasta se houver/arquivo.png