Action (@NotNull @Nls String message, boolean addProgressIconBelow) { myLock.lock(); try { cancelCurrentAction(); Action action = new Action(); myCurrentAction = action; invokeLater(() -> { clearUI(); if (addProgressIconBelow) { AsyncProcessIcon asyncProcessIcon = new AsyncProcessIcon(message); add(asyncProcessIcon, BorderLayout.CENTER); setVisible(true); asyncProcessIcon.resume(); } refreshUI(); }); return action; } finally { myLock.unlock(); } }