From 760b5605ed85ff46296abd94f0840f30fce56e66 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 21 Dec 2015 16:20:42 +0100 Subject: [PATCH] remove config listeners on ffdec restart (solves a nullpointer exception problem) --- .../decompiler/flash/gui/ImagePanel.java | 10 ----- .../decompiler/flash/gui/MainFrameMenu.java | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index 3ac054ae4..dd38ac07e 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -54,7 +54,6 @@ import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -62,7 +61,6 @@ import java.util.Timer; import java.util.TimerTask; import java.util.logging.Level; import java.util.logging.Logger; -import javax.imageio.ImageIO; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.JLabel; @@ -518,14 +516,6 @@ public final class ImagePanel extends JPanel implements MediaDisplay { return 1; } - public void setImage(byte[] data) { - try { - setImage(new SerializableImage(ImageIO.read(new ByteArrayInputStream(data)))); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - } - } - @Override public synchronized boolean zoomAvailable() { return zoomAvailable; diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 508f10dc7..7dd78ef04 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFBundle; import com.jpexs.decompiler.flash.SWFSourceInfo; import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.ConfigurationItemChangeListener; import com.jpexs.decompiler.flash.console.ContextMenuTools; import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; import com.jpexs.decompiler.flash.gui.helpers.CheckResources; @@ -72,6 +73,20 @@ public abstract class MainFrameMenu implements MenuBuilder { private SWF swf; + private ConfigurationItemChangeListener configListenerAutoDeobfuscate; + + private ConfigurationItemChangeListener configListenerInternalFlashViewer; + + private ConfigurationItemChangeListener configListenerParallelSpeedUp; + + private ConfigurationItemChangeListener configListenerDecompile; + + private ConfigurationItemChangeListener configListenerCacheOnDisk; + + private ConfigurationItemChangeListener configListenerGotoMainClassOnStartup; + + private ConfigurationItemChangeListener configListenerAutoRenameIdentifiers; + protected final Map menuHotkeys = new HashMap<>(); @Override @@ -895,37 +910,37 @@ public abstract class MainFrameMenu implements MenuBuilder { finishMenu("/settings"); setMenuChecked("/settings/autoDeobfuscation", Configuration.autoDeobfuscate.get()); - Configuration.autoDeobfuscate.addListener((Boolean newValue) -> { + Configuration.autoDeobfuscate.addListener(configListenerAutoDeobfuscate = (Boolean newValue) -> { setMenuChecked("/settings/autoDeobfuscation", newValue); }); setMenuChecked("/settings/internalViewer", Configuration.internalFlashViewer.get() || externalFlashPlayerUnavailable); - Configuration.internalFlashViewer.addListener((Boolean newValue) -> { + Configuration.internalFlashViewer.addListener(configListenerInternalFlashViewer = (Boolean newValue) -> { setMenuChecked("/settings/internalViewer", newValue || externalFlashPlayerUnavailable); }); setMenuChecked("/settings/parallelSpeedUp", Configuration.parallelSpeedUp.get()); - Configuration.parallelSpeedUp.addListener((Boolean newValue) -> { + Configuration.parallelSpeedUp.addListener(configListenerParallelSpeedUp = (Boolean newValue) -> { setMenuChecked("/settings/parallelSpeedUp", newValue); }); setMenuChecked("/settings/disableDecompilation", !Configuration.decompile.get()); - Configuration.decompile.addListener((Boolean newValue) -> { + Configuration.decompile.addListener(configListenerDecompile = (Boolean newValue) -> { setMenuChecked("/settings/disableDecompilation", !newValue); }); setMenuChecked("/settings/cacheOnDisk", Configuration.cacheOnDisk.get()); - Configuration.cacheOnDisk.addListener((Boolean newValue) -> { + Configuration.cacheOnDisk.addListener(configListenerCacheOnDisk = (Boolean newValue) -> { setMenuChecked("/settings/cacheOnDisk", newValue); }); setMenuChecked("/settings/gotoMainClassOnStartup", Configuration.gotoMainClassOnStartup.get()); - Configuration.gotoMainClassOnStartup.addListener((Boolean newValue) -> { + Configuration.gotoMainClassOnStartup.addListener(configListenerGotoMainClassOnStartup = (Boolean newValue) -> { setMenuChecked("/settings/gotoMainClassOnStartup", newValue); }); setMenuChecked("/settings/autoRenameIdentifiers", Configuration.autoRenameIdentifiers.get()); - Configuration.autoRenameIdentifiers.addListener((Boolean newValue) -> { + Configuration.autoRenameIdentifiers.addListener(configListenerAutoRenameIdentifiers = (Boolean newValue) -> { setMenuChecked("/settings/autoRenameIdentifiers", newValue); }); @@ -1086,6 +1101,14 @@ public abstract class MainFrameMenu implements MenuBuilder { KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.removeKeyEventDispatcher(keyEventDispatcher); + Configuration.autoDeobfuscate.removeListener(configListenerAutoDeobfuscate); + Configuration.internalFlashViewer.removeListener(configListenerInternalFlashViewer); + Configuration.parallelSpeedUp.removeListener(configListenerParallelSpeedUp); + Configuration.decompile.removeListener(configListenerDecompile); + Configuration.cacheOnDisk.removeListener(configListenerCacheOnDisk); + Configuration.gotoMainClassOnStartup.removeListener(configListenerGotoMainClassOnStartup); + Configuration.autoRenameIdentifiers.removeListener(configListenerAutoRenameIdentifiers); + Main.stopRun(); }