Make unit listeners weak refs
authorBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 15:51:03 +0000 (15:51 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 15:51:03 +0000 (15:51 +0000)
src/com/billkuker/rocketry/motorsim/RocketScience.java

index 81cbbcea7878290c2678d5ea7ad49f4b5a7df9c3..ed89d6bb20a7311c9abd40c162b581d6e9ce702f 100644 (file)
@@ -1,5 +1,6 @@
 package com.billkuker.rocketry.motorsim;\r
 \r
+import java.lang.ref.WeakReference;\r
 import java.lang.reflect.Field;\r
 import java.lang.reflect.Modifier;\r
 import java.text.DecimalFormat;\r
@@ -36,12 +37,12 @@ public class RocketScience {
                public static Unit<Impulse> UNIT = NEWTON_SECOND;\r
        }\r
        \r
-       private static HashSet<UnitPreferenceListener> prefListeners = new HashSet<RocketScience.UnitPreferenceListener>();\r
+       private static HashSet<WeakReference<UnitPreferenceListener>> prefListeners = new HashSet<WeakReference<UnitPreferenceListener>>();\r
        public static interface UnitPreferenceListener{\r
                public void preferredUnitsChanged();\r
        }\r
        public static void addUnitPreferenceListener(UnitPreferenceListener l){\r
-               prefListeners.add(l);\r
+               prefListeners.add(new WeakReference<RocketScience.UnitPreferenceListener>(l));\r
        }\r
 \r
        public static enum UnitPreference{\r
@@ -82,8 +83,10 @@ public class RocketScience {
                        preference = up;\r
                        Preferences prefs = Preferences.userNodeForPackage(RocketScience.class);\r
                        prefs.put("PreferedUnits", up.toString());\r
-                       for ( UnitPreferenceListener l : prefListeners ){\r
-                               l.preferredUnitsChanged();\r
+                       for ( WeakReference<UnitPreferenceListener> weak : prefListeners ){\r
+                               UnitPreferenceListener l = weak.get();\r
+                               if ( l != null )\r
+                                       l.preferredUnitsChanged();\r
                        }\r
                }\r
                \r