Presumo che quel runExe, che è "bloccante" per via del waitFor, lo esegui nel contesto del EDT, Event Dispatch Thread, a seguito di un evento di un componente.
Questione già discussa decine di volte sul forum: il EDT non va mai tenuto "impegnato" per troppo tempo, pena il "congelamento" della interfaccia grafica. In questo caso dovresti usare un thread a parte.