Вот шаблон для makng swing-freindly.
Sublass Action (MyAction) и сделайте его doAction многопоточным.
Заставьте конструктора взять имя строки.
Дайте ему абстрактный метод actionImpl ().
Пусть это будет похоже на * (предупреждение псевдокода!)
doAction(){
new Thread(){
public void run(){
//kick off thread to do actionImpl().
actionImpl();
MyAction.this.interrupt();
}.start(); // use a worker pool if you care about garbage.
try {
sleep(300);
Go to a busy cursor
sleep(600);
Show a busy dialog(Name) // name comes in handy here
} catch( interrupted exception){
show normal cursor
}
Вы можете записать время, затраченное на выполнение задачи, и в следующий раз в вашем диалоговом окне отобразится достойная оценка.
Если вы хотите быть по-настоящему милым, спите в другом рабочем потоке.