Blob Blame History Raw
From 6c0fb53d12447f6c14ce75d8eb9edcf08402c2d0 Mon Sep 17 00:00:00 2001
From: Mike Pope <mpope@computer.org>
Date: Sun, 22 Sep 2013 21:49:21 +0930
Subject: [PATCH] Work around Java crash when stopping opening video.

---
 src/net/sf/freecol/client/gui/Canvas.java          | 10 ++++++++-
 .../freecol/client/gui/video/VideoComponent.java   | 24 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/net/sf/freecol/client/gui/Canvas.java b/src/net/sf/freecol/client/gui/Canvas.java
index d4116f0..9f429bd 100644
--- a/src/net/sf/freecol/client/gui/Canvas.java
+++ b/src/net/sf/freecol/client/gui/Canvas.java
@@ -931,7 +931,16 @@ public final class Canvas extends JDesktopPane {
         if (frame != null && frame != comp) {
             frame.dispose();
         } else {
-            super.remove(comp);
+            // Java 1.7.0 as seen on Fedora with:
+            //   Java version: 1.7.0_40
+            //   Java WM version: 24.0-b56
+            // crashes here deep in the java libraries.
+            try {
+                super.remove(comp);
+            } catch (Exception e) {
+                logger.warning("Java crash");
+                e.printStackTrace();
+            }
         }
         repaint(updateBounds.x, updateBounds.y, updateBounds.width, updateBounds.height);
     }
diff --git a/src/net/sf/freecol/client/gui/video/VideoComponent.java b/src/net/sf/freecol/client/gui/video/VideoComponent.java
index 189f4a8..d368248 100644
--- a/src/net/sf/freecol/client/gui/video/VideoComponent.java
+++ b/src/net/sf/freecol/client/gui/video/VideoComponent.java
@@ -23,6 +23,8 @@ import java.awt.Insets;
 import java.awt.event.MouseListener;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.swing.JPanel;
 import javax.swing.border.Border;
@@ -38,6 +40,8 @@ import com.fluendo.player.Cortado;
  */
 public class VideoComponent extends JPanel {
 
+    private static final Logger logger = Logger.getLogger(VideoComponent.class.getName());
+
     private final Cortado applet;
     private List<VideoListener> videoListeners = new LinkedList<VideoListener>();
 
@@ -136,4 +140,25 @@ public class VideoComponent extends JPanel {
     private Border createBorder() {
         return FreeColImageBorder.imageBorder;
     }
+
+    // Override Component
+
+    /**
+     * {@inheritDoc}
+     */
+    public void removeNotify() {
+        applet.stop();
+        applet.destroy();
+
+        // Java 1.7.0 as seen on Fedora with:
+        //   Java version: 1.7.0_40
+        //   Java WM version: 24.0-b56
+        // crashes here deep in the java libraries.
+        try {
+            super.removeNotify();
+        } catch (Exception e) {
+            logger.warning("Mystery crash" + e);
+            e.printStackTrace();
+        }
+    }
 }
-- 
1.8.4.2