From da44c0536f14476bfd8447f5e540e8c76b8c07aa Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Mon, 16 Mar 2015 12:49:10 +0100
Subject: [PATCH] fix for issue #97 non closing write operation in XChartPanel
 - saveJPGWithQuality

---
 .../java/com/xeiam/xchart/BitmapEncoder.java  | 30 +++++++++++--------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java
index 3700d3e3..736dbe64 100644
--- a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java
+++ b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java
@@ -38,7 +38,7 @@ import javax.imageio.stream.FileImageOutputStream;
 
 /**
  * A helper class with static methods for saving Charts as bitmaps
- * 
+ *
  * @author timmolter
  */
 public final class BitmapEncoder {
@@ -56,7 +56,7 @@ public final class BitmapEncoder {
 
   /**
    * Save a Chart as an image file
-   * 
+   *
    * @param chart
    * @param fileName
    * @param bitmapFormat
@@ -72,8 +72,9 @@ public final class BitmapEncoder {
   }
 
   /**
-   * Save a chart as a PNG with a custom DPI. The default DPI is 72, which is fine for displaying charts on a computer monitor, but for printing charts, a DPI of around 300 is much better.
-   * 
+   * Save a chart as a PNG with a custom DPI. The default DPI is 72, which is fine for displaying charts on a computer monitor, but for printing
+   * charts, a DPI of around 300 is much better.
+   *
    * @param chart
    * @param fileName
    * @param DPI
@@ -83,7 +84,8 @@ public final class BitmapEncoder {
 
     double scaleFactor = DPI / 72.0;
 
-    BufferedImage bufferedImage = new BufferedImage((int) (chart.getWidth() * scaleFactor), (int) (chart.getHeight() * scaleFactor), BufferedImage.TYPE_INT_RGB);
+    BufferedImage bufferedImage = new BufferedImage((int) (chart.getWidth() * scaleFactor), (int) (chart.getHeight() * scaleFactor),
+        BufferedImage.TYPE_INT_RGB);
 
     Graphics2D graphics2D = bufferedImage.createGraphics();
 
@@ -117,7 +119,7 @@ public final class BitmapEncoder {
 
   /**
    * Sets the metadata correctly
-   * 
+   *
    * @param metadata
    * @param DPI
    * @throws IIOInvalidTreeException
@@ -145,7 +147,7 @@ public final class BitmapEncoder {
 
   /**
    * Save a Chart as a JPEG file
-   * 
+   *
    * @param chart
    * @param fileName
    * @param quality - a float between 0 and 1 (1 = maximum quality)
@@ -164,15 +166,19 @@ public final class BitmapEncoder {
     iwp.setCompressionQuality(quality);
     File file = new File(fileName);
     FileImageOutputStream output = new FileImageOutputStream(file);
-    writer.setOutput(output);
-    IIOImage image = new IIOImage(bufferedImage, null, null);
-    writer.write(null, image, iwp);
-    writer.dispose();
+    try {
+      writer.setOutput(output);
+      IIOImage image = new IIOImage(bufferedImage, null, null);
+      writer.write(null, image, iwp);
+      writer.dispose();
+    } finally {
+      output.close();
+    }
   }
 
   /**
    * Generates a byte[] for a given chart, PNG compressed
-   * 
+   *
    * @param chart
    * @return a byte[] for a given chart, PNG compressed
    * @throws IOException
-- 
GitLab