diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerController.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerController.java index 099ad4fbd188ad686f4585b8e8f15ab0e7182dea..f65fe674298b9522330d9229f35a33b769a28f56 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerController.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerController.java @@ -190,7 +190,9 @@ private ImageAnalyzerController() { }); groupManager.getAnalyzedGroups().addListener((Observable o) -> { - checkForGroups(); + if(Case.isCaseOpen()){ + checkForGroups(); + } }); groupManager.getUnSeenGroups().addListener((Observable observable) -> { diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerTopComponent.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerTopComponent.java index 028605ea3bfa2944f0f3c2dfae9bb61943dd099c..bd72f1137023f01d010eb1a50fd6de747f022bf9 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerTopComponent.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ImageAnalyzerTopComponent.java @@ -34,6 +34,7 @@ import org.openide.windows.Mode; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.imageanalyzer.gui.GroupPane; import org.sleuthkit.autopsy.imageanalyzer.gui.MetaDataPane; @@ -67,6 +68,7 @@ public final class ImageAnalyzerTopComponent extends TopComponent implements Exp public final static String PREFERRED_ID = "ImageAnalyzerTopComponent"; private static final Logger LOGGER = Logger.getLogger(ImageAnalyzerTopComponent.class.getName()); + private static boolean topComponentInitialized = false; public static void openTopComponent() { //TODO:eventually move to this model, throwing away everything and rebuilding controller groupmanager etc for each case. @@ -79,6 +81,7 @@ public static void openTopComponent() { // timeLineController.openTimeLine(); final ImageAnalyzerTopComponent tc = (ImageAnalyzerTopComponent) WindowManager.getDefault().findTopComponent("ImageAnalyzerTopComponent"); if (tc != null) { + topComponentInitialized = true; WindowManager.getDefault().isTopComponentFloating(tc); Mode mode = WindowManager.getDefault().findMode("timeline"); if (mode != null) { @@ -90,12 +93,14 @@ public static void openTopComponent() { } public static void closeTopComponent() { - final TopComponent etc = WindowManager.getDefault().findTopComponent("ImageAnalyzerTopComponent"); - if (etc != null) { - try { - etc.close(); - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "failed to close ImageAnalyzerTopComponent", e); + if(topComponentInitialized){ + final TopComponent etc = WindowManager.getDefault().findTopComponent("ImageAnalyzerTopComponent"); + if (etc != null) { + try { + etc.close(); + } catch (Exception e) { + LOGGER.log(Level.SEVERE, "failed to close ImageAnalyzerTopComponent", e); + } } } } @@ -128,7 +133,7 @@ public ImageAnalyzerTopComponent() { setName(Bundle.CTL_ImageAnalyzerTopComponent()); setToolTipText(Bundle.HINT_ImageAnalyzerTopComponent()); - + initComponents(); Platform.runLater(() -> {//initialize jfx ui diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThumbnailCache.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThumbnailCache.java index 66b2b7e3378c53687aea06514607e199a2a3c966..22f3b42275c49acccfbb3bfbad16627acb85d7af 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThumbnailCache.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/ThumbnailCache.java @@ -162,7 +162,11 @@ private Image generateAndSaveThumbnail(final DrawableFile<?> file) { try (InputStream inputStream = new BufferedInputStream(new ReadContentInputStream(file.getAbstractFile()))) { final Image thumbnail = new Image(inputStream, MAX_ICON_SIZE, MAX_ICON_SIZE, true, true); if (thumbnail.isError()) { //if there was an error loading the image via JFX, fall back on Swing - LOGGER.log(Level.WARNING, "problem loading image: " + file.getName() + " .", thumbnail.getException()); + LOGGER.log(Level.WARNING, "problem loading thumbnail for image: " + file.getName() + " ."); + // Doing it this way puts the whole stack trace in the console output, which is probably not + // needed. There are a significant number of cases where this is expected to fail (bitmaps, + // empty files, etc.) + //LOGGER.log(Level.WARNING, "problem loading image: " + file.getName() + " .", thumbnail.getException()); return fallbackToSwingImage(file); } else { //if the load went successfully, save the thumbnail to disk on a background thread imageSaver.execute(() -> { diff --git a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java index 31fc425b822fbc78940eb48df0685213e04c3003..e86d9c1fd03e075c3400626bab8e410b06929440 100644 --- a/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java +++ b/ImageAnalyzer/src/org/sleuthkit/autopsy/imageanalyzer/grouping/GroupManager.java @@ -618,6 +618,11 @@ public void setSortOrder(SortOrder sortOrder) { * @param force true to force a full db query regroup */ public <A extends Comparable<A>> void regroup(final DrawableAttribute<A> groupBy, final GroupSortBy sortBy, final SortOrder sortOrder, Boolean force) { + + if(! Case.isCaseOpen()){ + return; + } + //only re-query the db if the group by attribute changed or it is forced if (groupBy != getGroupBy() || force == true) { setGroupBy(groupBy);