Quando ImageIO.read ha terminato, hai creato ImageIcon e l'hai settato .... il run() termina.
Scusa ma l'esempio di Icon di proxy l'hai visto??
P.S. Ah, il tuo codice non è nemmeno correttissimo al 100%, stai aggiornando il componente mapHolder nel contesto di un thread che non è il EDT.