{
Desktop.instance.closeAll_actionPerformed(null);
Desktop.instance.setVisible(false);
- Desktop.instance.dispose();
+ Desktop us = Desktop.instance;
Desktop.instance = null;
+ // call dispose in a separate thread - try to avoid indirect deadlocks
+ new Thread(new Runnable() {
+ @Override
+ public void run()
+ {
+ ExecutorService dex = us.dialogExecutor;
+ if (dex!=null) {
+ dex.shutdownNow();
+ us.dialogExecutor=null;
+ us.block.drainPermits();
+ }
+ us.dispose();
+ }
+ }).start();
}
}