import java.text.DecimalFormat;\r
import java.text.NumberFormat;\r
import java.util.HashSet;\r
+import java.util.Iterator;\r
import java.util.Set;\r
import java.util.prefs.Preferences;\r
\r
import javax.measure.unit.Unit;\r
import javax.measure.unit.UnitFormat;\r
\r
+import org.apache.log4j.Logger;\r
import org.jscience.physics.amount.Amount;\r
\r
public class RocketScience {\r
+ private static final Logger log = Logger.getLogger(RocketScience.class);\r
+ \r
public static Unit<Pressure> PSI = new ProductUnit<Pressure>(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)));\r
public static Unit<Impulse> NEWTON_SECOND = new ProductUnit<Impulse>(SI.NEWTON.times(SI.SECOND));\r
public static Unit<Impulse> POUND_SECOND = new ProductUnit<Impulse>(NonSI.POUND_FORCE.times(SI.SECOND));\r
preference = up;\r
Preferences prefs = Preferences.userNodeForPackage(RocketScience.class);\r
prefs.put("PreferedUnits", up.toString());\r
- for ( WeakReference<UnitPreferenceListener> weak : prefListeners ){\r
+ Iterator<WeakReference<UnitPreferenceListener>> weakIter = prefListeners.iterator();\r
+ while (weakIter.hasNext()) {\r
+ WeakReference<UnitPreferenceListener> weak = weakIter.next();\r
UnitPreferenceListener l = weak.get();\r
- if ( l != null )\r
+ if (l != null) {\r
l.preferredUnitsChanged();\r
+ } else {\r
+ log.debug("Weak reference to UPE is null");\r
+ weakIter.remove();\r
+ }\r
}\r
}\r
\r
import java.io.FileInputStream;\r
import java.io.FileNotFoundException;\r
import java.io.IOException;\r
+import java.lang.ref.WeakReference;\r
import java.net.URI;\r
import java.net.URISyntaxException;\r
import java.util.Collections;\r
import java.util.HashMap;\r
import java.util.HashSet;\r
+import java.util.Iterator;\r
import java.util.Map;\r
import java.util.Set;\r
\r
+import org.apache.log4j.Logger;\r
+\r
import com.billkuker.rocketry.motorsim.Fuel;\r
import com.billkuker.rocketry.motorsim.io.MotorIO;\r
\r
public class FuelResolver {\r
+ private static final Logger log = Logger.getLogger(FuelResolver.class);\r
+ \r
public static class FuelNotFound extends Exception {\r
private static final long serialVersionUID = 1L;\r
}\r
public void fuelsChanged();\r
}\r
\r
- private static Set<FuelsChangeListener> listeners = new HashSet<FuelResolver.FuelsChangeListener>();\r
+ private static Set<WeakReference<FuelsChangeListener>> listeners = new HashSet<WeakReference<FuelResolver.FuelsChangeListener>>();\r
private static Map<URI, Fuel> fuels = new HashMap<URI, Fuel>();\r
private static Map<Fuel, URI> uris = new HashMap<Fuel, URI>();\r
\r
}\r
\r
public static void addFuelsChangeListener(FuelsChangeListener l){\r
- listeners.add(l);\r
+ listeners.add(new WeakReference<FuelResolver.FuelsChangeListener>(l));\r
}\r
\r
public static void removeFuelsChangeListener(FuelsChangeListener l){\r
public static void add(Fuel f, URI uri) {\r
fuels.put(uri, f);\r
uris.put(f, uri);\r
- for ( FuelsChangeListener l : listeners )\r
- l.fuelsChanged();\r
+ \r
+ Iterator<WeakReference<FuelsChangeListener>> weakIter = listeners.iterator();\r
+ while (weakIter.hasNext()) {\r
+ WeakReference<FuelsChangeListener> weak = weakIter.next();\r
+ FuelsChangeListener l = weak.get();\r
+ if (l != null) {\r
+ l.fuelsChanged();\r
+ } else {\r
+ log.debug("Weak reference to FCL is null");\r
+ weakIter.remove();\r
+ }\r
+ }\r
}\r
}\r