Code that results in UI interaction needs to be invoked on the EDT.

This commit is contained in:
Eamonn Saunders 2014-12-01 10:21:57 -05:00
parent f9e998dcd6
commit 4e1da6b73e

View File

@ -18,6 +18,7 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import java.awt.EventQueue;
import java.awt.Frame; import java.awt.Frame;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
@ -1077,7 +1078,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
} }
//case change helper //case change helper
private static void doCaseChange(Case toChangeTo) { private static void doCaseChange(final Case toChangeTo) {
logger.log(Level.INFO, "Changing Case to: " + toChangeTo); //NON-NLS logger.log(Level.INFO, "Changing Case to: " + toChangeTo); //NON-NLS
if (toChangeTo != null) { // new case is open if (toChangeTo != null) { // new case is open
@ -1085,39 +1086,49 @@ public class Case implements SleuthkitCase.ErrorObserver {
Case.clearTempFolder(); Case.clearTempFolder();
checkSubFolders(toChangeTo); checkSubFolders(toChangeTo);
// enable these menus EventQueue.invokeLater(new Runnable() {
CallableSystemAction.get(AddImageAction.class).setEnabled(true); @Override
CallableSystemAction.get(CaseCloseAction.class).setEnabled(true); public void run() {
CallableSystemAction.get(CasePropertiesAction.class).setEnabled(true); // enable these menus
CallableSystemAction.get(CaseDeleteAction.class).setEnabled(true); // Delete Case menu CallableSystemAction.get(AddImageAction.class).setEnabled(true);
CallableSystemAction.get(CaseCloseAction.class).setEnabled(true);
CallableSystemAction.get(CasePropertiesAction.class).setEnabled(true);
CallableSystemAction.get(CaseDeleteAction.class).setEnabled(true); // Delete Case menu
if (toChangeTo.hasData()) {
// open all top components
CoreComponentControl.openCoreWindows();
} else {
// close all top components
CoreComponentControl.closeCoreWindows();
}
}
});
if (toChangeTo.hasData()) {
// open all top components
CoreComponentControl.openCoreWindows();
} else {
// close all top components
CoreComponentControl.closeCoreWindows();
}
} else { // case is closed } else { // case is closed
// close all top components first EventQueue.invokeLater(new Runnable() {
CoreComponentControl.closeCoreWindows(); @Override
public void run() {
// close all top components first
CoreComponentControl.closeCoreWindows();
// disable these menus // disable these menus
CallableSystemAction.get(AddImageAction.class).setEnabled(false); // Add Image menu CallableSystemAction.get(AddImageAction.class).setEnabled(false); // Add Image menu
CallableSystemAction.get(CaseCloseAction.class).setEnabled(false); // Case Close menu CallableSystemAction.get(CaseCloseAction.class).setEnabled(false); // Case Close menu
CallableSystemAction.get(CasePropertiesAction.class).setEnabled(false); // Case Properties menu CallableSystemAction.get(CasePropertiesAction.class).setEnabled(false); // Case Properties menu
CallableSystemAction.get(CaseDeleteAction.class).setEnabled(false); // Delete Case menu CallableSystemAction.get(CaseDeleteAction.class).setEnabled(false); // Delete Case menu
//clear pending notifications //clear pending notifications
MessageNotifyUtil.Notify.clear(); MessageNotifyUtil.Notify.clear();
Frame f = WindowManager.getDefault().getMainWindow();
f.setTitle(Case.getAppName()); // set the window name to just application name
Frame f = WindowManager.getDefault().getMainWindow(); //try to force gc to happen
f.setTitle(Case.getAppName()); // set the window name to just application name System.gc();
System.gc();
//try to force gc to happen }
System.gc(); });
System.gc();
} }
//log memory usage after case changed //log memory usage after case changed
@ -1130,8 +1141,13 @@ public class Case implements SleuthkitCase.ErrorObserver {
private static void doCaseNameChange(String newCaseName) { private static void doCaseNameChange(String newCaseName) {
// update case name // update case name
if (!newCaseName.equals("")) { if (!newCaseName.equals("")) {
Frame f = WindowManager.getDefault().getMainWindow(); EventQueue.invokeLater(new Runnable() {
f.setTitle(newCaseName + " - " + Case.getAppName()); // set the window name to the new value @Override
public void run() {
Frame f = WindowManager.getDefault().getMainWindow();
f.setTitle(newCaseName + " - " + Case.getAppName()); // set the window name to the new value
}
});
} }
} }