From bbefd328a819337070625d9533eed94378cd90a8 Mon Sep 17 00:00:00 2001 From: ebner Date: Tue, 14 Apr 2015 14:15:13 +0200 Subject: [PATCH] Fixed memory leak that was introduced with the VirtualStack workaround - its still a workaround so CTRLHA-109 --- .../java/ch/psi/imagej/hdf5/HDF5Reader.java | 2 +- .../ch/psi/imagej/hdf5/ImagePlusHDF5.java | 64 +++++++++++++++++++ .../ch/psi/imagej/hdf5/VirtualStackHDF5.java | 8 +-- 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ch/psi/imagej/hdf5/ImagePlusHDF5.java diff --git a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java index a6b1191..d32a777 100644 --- a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java +++ b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java @@ -278,7 +278,7 @@ public class HDF5Reader implements PlugIn { } } - ImagePlus imp = new ImagePlus(filename + " " + datasetName, stack); + ImagePlus imp = new ImagePlusHDF5(filename + " " + datasetName, stack); imp.resetDisplayRange(); imp.show(); diff --git a/src/main/java/ch/psi/imagej/hdf5/ImagePlusHDF5.java b/src/main/java/ch/psi/imagej/hdf5/ImagePlusHDF5.java new file mode 100644 index 0000000..722509e --- /dev/null +++ b/src/main/java/ch/psi/imagej/hdf5/ImagePlusHDF5.java @@ -0,0 +1,64 @@ +package ch.psi.imagej.hdf5; + +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.util.logging.Logger; + +import ij.ImagePlus; +import ij.ImageStack; + +public class ImagePlusHDF5 extends ImagePlus { + + + private static final Logger logger = Logger.getLogger(ImagePlusHDF5.class.getName()); + + public ImagePlusHDF5(String title, ImageStack stack) { + super(title, stack); + } + + @Override + public void show() { + super.show(); + getWindow().addWindowListener(new WindowListener() { + + @Override + public void windowOpened(WindowEvent e) { + logger.info(""); + } + + @Override + public void windowIconified(WindowEvent e) { + logger.info(""); + } + + @Override + public void windowDeiconified(WindowEvent e) { + logger.info(""); + } + + @Override + public void windowDeactivated(WindowEvent e) { + logger.info(""); + } + + @Override + public void windowClosing(WindowEvent e) { + logger.info("Closing"); + } + + @Override + public void windowClosed(WindowEvent e) { + logger.info("Closed"); + ImageStack stack = getStack(); + if(stack instanceof VirtualStackHDF5){ + ((VirtualStackHDF5) stack).close(); + } + } + + @Override + public void windowActivated(WindowEvent e) { + logger.info(""); + } + }); + } +} diff --git a/src/main/java/ch/psi/imagej/hdf5/VirtualStackHDF5.java b/src/main/java/ch/psi/imagej/hdf5/VirtualStackHDF5.java index 0cfc5d1..ed648a6 100644 --- a/src/main/java/ch/psi/imagej/hdf5/VirtualStackHDF5.java +++ b/src/main/java/ch/psi/imagej/hdf5/VirtualStackHDF5.java @@ -158,10 +158,10 @@ public class VirtualStackHDF5 extends ImageStack { return bitDepth; } - @Override - protected void finalize() throws Throwable { - super.finalize(); - + /** + * Close HDF5 file + */ + public void close() { logger.info("Closing HDF5 file"); try{ file.close();