Index: /trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java
===================================================================
--- /trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java	(revision 524)
+++ /trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java	(revision 654)
@@ -30,4 +30,5 @@
 import javax.swing.JWindow;
 import javax.swing.Timer;
+import java.util.TimerTask;
 import javax.swing.UIManager;
 import tmcsim.cadsimulator.Coordinator;
@@ -146,70 +147,76 @@
         loadEvents();
 
+        java.util.Timer t = new java.util.Timer();
+
         // Create a timer that fetches the simulation time every second.
-        Timer timer = new Timer(ONE_SECOND, new ActionListener()
-        {
-            // Every second, see if an event should be launched
-            public void actionPerformed(ActionEvent e)
+        t.scheduleAtFixedRate(
+            new TimerTask()
             {
-                String currentATMStime = "";
-                Date simClock = new Date();
-                // Obtain the simulation time from the CAD server
-                try
+                // Every second, see if an event should be launched
+                public void run()
                 {
-                    long simtime = theCoordinator.getCurrentSimulationTime();
-                    currentClock = theCoordinator.formatTimeInSeconds(simtime);
-                    // For Debugging, show the ATMS time
-//                    long ATMStime = theCoorInt.getATMStime();       
-//                    Date atmsdate = new Date(ATMStime);
-//                    currentATMStime = formatter.format(atmsdate);
+                    String currentATMStime = "";
+                    Date simClock = new Date();
+                    // Obtain the simulation time from the CAD server
                     try
                     {
-                        simClock = formatter.parse(currentClock);
+                        long simtime = theCoordinator.getCurrentSimulationTime();
+                        currentClock = theCoordinator.formatTimeInSeconds(simtime);
+                        // For Debugging, show the ATMS time
+    //                    long ATMStime = theCoorInt.getATMStime();       
+    //                    Date atmsdate = new Date(ATMStime);
+    //                    currentATMStime = formatter.format(atmsdate);
+                        try
+                        {
+                            simClock = formatter.parse(currentClock);
+                        }
+                        catch (ParseException ex)
+                        {
+                            Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, ex);
+                            System.out.println("Invalid simulation clock time found");
+                            System.exit(-1);
+                        }
                     }
-                    catch (ParseException ex)
+                    catch (RemoteException ex)
                     {
+                        System.out.println("Remote Exception reading sim or ATMS clock time");
                         Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, ex);
-                        System.out.println("Invalid simulation clock time found");
-                        System.exit(-1);
+                    }
+                    // If we have any events left to process
+                    if (!eventQueue.isEmpty())
+                    {
+                        // Get the time to launch the next event
+                        TrafficEvent nextEvent = eventQueue.peek();
+                        Date eventTime = nextEvent.eventDate;
+                        // Check the queue of events to see if the first
+                        // item should be launched.  IF so, 
+                        // issue that command and remove it from queue.
+                        if (eventTime.before(simClock) || eventTime.equals(simClock))
+                        {
+                            System.out.println("LAUNCHING EVENT: " + nextEvent.toString());
+                            // apply colorization to highways
+                            highways.applyColorToHighwayStretch(nextEvent.routeNumber, nextEvent.dir,
+                                    nextEvent.postmile, nextEvent.range, nextEvent.color);
+                            // Remove this event from the queue, we're done with it.
+                            eventQueue.remove();
+                            setChanged();
+                            // Send updated list to view
+                            // notifyObservers(getEventQueue());
+                            // Notify view it should scroll to next event
+                            notifyObservers(new Integer(0));
+                        }
+                        setChanged();
+                        notifyObservers(currentClock);
                     }
                 }
-                catch (RemoteException ex)
-                {
-                    System.out.println("Remote Exception reading sim or ATMS clock time");
-                    Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, ex);
-                }
-                // If we have any events left to process
-                if (!eventQueue.isEmpty())
-                {
-                    // Get the time to launch the next event
-                    TrafficEvent nextEvent = eventQueue.peek();
-                    Date eventTime = nextEvent.eventDate;
-                    // Check the queue of events to see if the first
-                    // item should be launched.  IF so, 
-                    // issue that command and remove it from queue.
-                    if (eventTime.before(simClock) || eventTime.equals(simClock))
-                    {
-                        System.out.println("LAUNCHING EVENT: " + nextEvent.toString());
-                        // apply colorization to highways
-                        highways.applyColorToHighwayStretch(nextEvent.routeNumber, nextEvent.dir,
-                                nextEvent.postmile, nextEvent.range, nextEvent.color);
-                        // Remove this event from the queue, we're done with it.
-                        eventQueue.remove();
-                        setChanged();
-                        // Send updated list to view
-                        // notifyObservers(getEventQueue());
-                        // Notify view it should scroll to next event
-                        notifyObservers(new Integer(0));
-                    }
-                    setChanged();
-                    notifyObservers(currentClock);
-                }
-            }
-        });
-        timer.start();
-
-        // Always write to json for google map display
-        Thread wtJson = new WriteToJsonThread();
+            },
+            0, 
+            ONE_SECOND
+            );
+
+        // Also write to json for google map display, every ten seconds.
+        WriteToJsonTask wtJson = new WriteToJsonTask();
         wtJson.start();
+        System.out.println("Traffic Model Mgr init complete.");
     }
     /** Accessor to event queue
@@ -401,38 +408,32 @@
      *  by Google Maps.
      */
-    class WriteToJsonThread extends Thread
-    {
-
-        public void run()
-        {
-            System.out.println("WriteToJson Thread starting.");
-            // Run indefinitely
-            while (true)
-            {
-                 // Write the highway network status to Json
-                String geojson = highways.toJson();
-                PrintWriter out;
-                try
+    class WriteToJsonTask
+    {
+        void start()
+        {
+            System.out.println("WriteToJson Task starting.");
+            java.util.Timer tasktimer = new java.util.Timer();
+            tasktimer.scheduleAtFixedRate(
+                new TimerTask()
                 {
-                    // currently writes to local file
-                    out = new PrintWriter(jsonPath);
-                    out.print(geojson);
-                    out.close();
-                }
-                catch (FileNotFoundException ex)
-                {
-                    Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, ex);
-                }
-                // Wait for Google Map to process the data we just sent
-                try
-                {
-                    Thread.sleep(10000);
-                }
-                catch (InterruptedException ie)
-                {
-                    ie.printStackTrace();
-                }
-            }
-
+                    public void run()
+                    {
+                        String geojson = highways.toJson();
+                        PrintWriter out;
+                        try
+                        {
+                            // currently writes to local file
+                            out = new PrintWriter(jsonPath);
+                            out.print(geojson);
+                            out.close();
+                        }
+                        catch (FileNotFoundException ex)
+                        {
+                            Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, ex);
+                        }
+                    }    
+                },
+                0,   // run first occurrence now
+                10000); // run every ten seconds
         }
     }
Index: /trunk/src/tmcsim/cadsimulator/CADServer.java
===================================================================
--- /trunk/src/tmcsim/cadsimulator/CADServer.java	(revision 455)
+++ /trunk/src/tmcsim/cadsimulator/CADServer.java	(revision 654)
@@ -291,6 +291,5 @@
                     theCoordinator);
             theTrafficMgr.addObserver(theViewer);
-            theTrafficMgr.run();
-
+    
             theMediaMgr = new MediaManager(
                     cadServerProperties.getProperty(
@@ -346,4 +345,9 @@
 
         theViewer.setVisible(true);
+        // I think the traffic mgr has to run AFTER viewer is set visible, because
+        // inside run() it loads traffic events and wants to notify the view
+        // to update itself ... so the view must be visible first?
+        // When this stmt was prior to setVisible, we hung on setVisible.
+        theTrafficMgr.run();
 
     }
Index: unk/src/tmcsim/RunSim.java
===================================================================
--- /trunk/src/tmcsim/RunSim.java	(revision 523)
+++ 	(revision )
@@ -1,18 +1,0 @@
-
-package tmcsim;
-
-/**
- * Run the CAD Server, Client, and Simulation Manager together.
- * Used for development and testing.
- * @author jdalbey
- */
-public class RunSim 
-{
-    public static void main(String[] args) 
-    {
-        tmcsim.cadsimulator.CADServer.main(args);
-        tmcsim.client.CADClient.main(args);
-        String[] scriptname ={"full_script_2016.xml"};
-        tmcsim.simulationmanager.SimulationManager.main(scriptname);
-    }
-}
Index: /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties
===================================================================
--- /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties	(revision 653)
+++ /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties	(revision 654)
@@ -55,5 +55,5 @@
 platform.active=default_platform
 javac.compilerargs=
-main.class=tmcsim.RunSim
+main.class=tmcsim.cadsimulator.CADServer
 dist.jar=${dist.dir}/TMCSim.jar
 javac.test.processorpath=${javac.test.classpath}
Index: /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml
===================================================================
--- /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml	(revision 650)
+++ /trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml	(revision 654)
@@ -1034,4 +1034,6 @@
     </target>
     <target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
+    <!--When you do "Clean and Build" I think it does this jar target, and sets as the main file in the manifest
+        whichever project configuration is current. -->
     <target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>
     <!--
