La questione è che quel "icon.png" è una specifica sul file-system ed è "relativa" alla directory corrente, quella cioè che è attuale quando viene avviata la JVM.
Quindi se funziona o no dipende da come/da dove avvii la applicazione. E questo generalmente è un problema e non è una buona cosa, soprattutto per immagini che fanno parte fissa della applicazione.
Sfrutta il concetto delle risorse.