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