Evento mouseClicked(MouseEvent me) chamado muitas vezes num mesmo clique

Tenho um label que a cada intervalo de tempo ele recebe uma imagem do tipo ImageIcon e um addMouseListener que tem como parâmetro o método mouseClicked que chama uma classe que abre o browser no link passado. A intenção é que esse label tenha uma imagem que quando clicada abre o browser.
Meu problema é que se clico na primeira imagem que aparece ele abre o browser uma vez, se eu clico na segunda imagem que aparece ele abre 2 vezes, se na terceira imagem, 3 vezes e assim por diante. o código da tela é grande, mas o código que coloco na parte SOUTH do BorderLayout é o seguinte:

	while(true){
		String link = null;
		link = "http://www.google.com";
		try {
			open(link, panel);
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

como podem ver, essa parte chama o método open(), que está abaixo:

	private void open(final String link) {
		remove(lblNewLabel);
		ImageIcon icon = new ImageIcon();
		icon = new ImageIcon("C:/Java/Projeto/Projetos/PendenciaAlta/images/banner"+z+".jpg");
		lblNewLabel.setIcon(icon);
		this.getContentPane().add(lblNewLabel, BorderLayout.SOUTH);
		this.setVisible(true);
		z++;
		this.lblNewLabel.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent me){
				int x=0;
				System.out.println("VARIAVEL clicked: "+x);
				new BrowserSiteCliente(link, x);
				System.out.println(link);
			} 
		});
		if(z==5){
			z=0;
		}
	}

Alguém que puder me dar uma ajuda,
Obrigado

Já que ninguém respondeu:

Minha Solução

Precisava de um MouseListener que ficava esperando o clique do mouse, mas só existe a função addMouseListener, portanto, a cada vez que minha função era lida, mais um MouseListener é colocando, assim, como eu queria mudar a imagem a cada x tempo e cada imagem precisava de um Listener, ao clicar, acionava-se todos os Listeners Anteriores.

Então ao invés de implementar diretamente o addMouseListener, simplesmente instanciei um objeto do tipo MouseListener e cada vez que chamo minha função, adiciono o objeto e no fim da função retiro-o:

   private void open(final String link) {  
      MouseListener ml = new MouseAdapter() {  
         public void mouseClicked(MouseEvent me){  
            new BrowserSiteCliente(link);  
         }  
      };  
      ImageIcon icon = new ImageIcon();  
      icon = new ImageIcon("C:/images/banner"+z+".jpg");  
      lblNewLabel .setIcon(icon);  
      this.getContentPane().add(lblNewLabel, BorderLayout.SOUTH);  
      this.setVisible(true);  
      z++;  
      this.lblNewLabel.addMouseListener(ml);  
      try {  
         Thread.sleep(2000);  
      } catch (InterruptedException e) {  
         e.printStackTrace();  
      }  
      this.lblNewLabel.removeMouseListener(ml);  
      if(z==5){  
         z=0;  
      }  
   }