少し前に、Swing EDT デッドロックを検出して回復を試みるコードをアプリケーションに追加したので、ユーザーは少なくともファイルを保存できました (デッドロックが発生しないことが最善ですが...)。Java 1.6 では、これは簡単です。EDT が十分な時間ブロックされていることを検出し、バックグラウンド スレッドからこれを呼び出します。
EventQueue newQ = new EventQueue();
Toolkit.getDefaultToolkit().getSystemEventQueue().push(newQ);
新しい UI イベントは新しい EventQueue/EDT で処理され、ユーザーは作業を保存できます。
Java 8 では、(ブロックされた) EventDispatchThread を古いキューから新しいキューにコピーするように EventQueue.push の実装が変更されているため、これは機能しません。