From ebab338cdfa9568fd94879a4d05c8d8f016dc899 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Tue, 23 Nov 2010 15:51:03 +0000 Subject: [PATCH] Make unit listeners weak refs --- .../billkuker/rocketry/motorsim/RocketScience.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/billkuker/rocketry/motorsim/RocketScience.java b/src/com/billkuker/rocketry/motorsim/RocketScience.java index 81cbbce..ed89d6b 100644 --- a/src/com/billkuker/rocketry/motorsim/RocketScience.java +++ b/src/com/billkuker/rocketry/motorsim/RocketScience.java @@ -1,5 +1,6 @@ package com.billkuker.rocketry.motorsim; +import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.text.DecimalFormat; @@ -36,12 +37,12 @@ public class RocketScience { public static Unit UNIT = NEWTON_SECOND; } - private static HashSet prefListeners = new HashSet(); + private static HashSet> prefListeners = new HashSet>(); public static interface UnitPreferenceListener{ public void preferredUnitsChanged(); } public static void addUnitPreferenceListener(UnitPreferenceListener l){ - prefListeners.add(l); + prefListeners.add(new WeakReference(l)); } public static enum UnitPreference{ @@ -82,8 +83,10 @@ public class RocketScience { preference = up; Preferences prefs = Preferences.userNodeForPackage(RocketScience.class); prefs.put("PreferedUnits", up.toString()); - for ( UnitPreferenceListener l : prefListeners ){ - l.preferredUnitsChanged(); + for ( WeakReference weak : prefListeners ){ + UnitPreferenceListener l = weak.get(); + if ( l != null ) + l.preferredUnitsChanged(); } } -- 2.47.2