Index: trunk/src/tmcsim/client/CADClientView.java
===================================================================
--- trunk/src/tmcsim/client/CADClientView.java	(revision 124)
+++ trunk/src/tmcsim/client/CADClientView.java	(revision 445)
@@ -3,4 +3,6 @@
 import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
@@ -14,4 +16,5 @@
 import javax.swing.Box;
 import javax.swing.BoxLayout;
+import javax.swing.JDialog;
 import javax.swing.JFrame;
 import javax.swing.JOptionPane;
@@ -639,103 +642,120 @@
      *</table>
      */
-    public void update(Observable o, Object arg) {
-        
-        
+    public void update(Observable o, Object arg) 
+    {        
         if(arg == null) 
         {
-            JOptionPane.showMessageDialog(this, 
-                    "Connection to the CAD Server has been lost.  " +
-                    "Restart the CAD Client.", "Connection Error", 
-                    JOptionPane.ERROR_MESSAGE); 
+             final JOptionPane pane = new JOptionPane("Connection to the CAD Server has been lost.  " +
+                    "Restart the CAD Client.");
+             JDialog dialog = pane.createDialog(this, "Connection Error");
+             dialog.setModal(false); // don't block background components
+             // Listen for dialog closing
+             dialog.addComponentListener(new ComponentAdapter() 
+             {
+                @Override
+                public void componentHidden(ComponentEvent e) 
+                {
+                    System.exit(-1);  // force hard exit
+                }
+             });
+             dialog.setVisible(true);
+            
+//            JOptionPane.showMessageDialog(this, 
+//                    "Connection to the CAD Server has been lost.  " +
+//                    "Restart the CAD Client.", "Connection Error", 
+//                    JOptionPane.ERROR_MESSAGE); 
             //return;
             // Changed to hard exit because Windows was hanging here
-            System.exit(-1);
+            //System.exit(-1);
         }
-        
+        else
+        {
         ObserverMessage oMessage = (ObserverMessage)arg;
     
-        switch(oMessage.type) {
-            case INCIDENT_INQUIRY:
-                IncidentInquiryModel iiModel = (IncidentInquiryModel)oMessage.value;
-                
-                CADMainPane   = new II_IncidentInquiry(iiModel, mainTextPane.getDocument());
-                CADMainPane.addObserver(CADFooterPane);
-                
-                if(!pageLocationSaved)
-                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
-                
-                updateViews(iiModel);               
-                
-                break;
-                
-            case INCIDENT_SUMMARY:
-                IncidentSummaryModel isModel = (IncidentSummaryModel)oMessage.value;
-                
-                CADMainPane   = new SA_IncidentSummary(isModel, mainTextPane.getDocument());
-                CADMainPane.addObserver(CADFooterPane);
-                
-                if(!pageLocationSaved)
-                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
-                
-                updateViews(isModel);
-                break;
-                
-            case INCIDENT_BOARD:
-                IncidentBoardModel ibModel = (IncidentBoardModel)oMessage.value;
-            
-                CADMainPane   = new IB_IncidentBoard(ibModel, mainTextPane.getDocument());
-                CADMainPane.addObserver(CADFooterPane);     
-                
-                if(!pageLocationSaved)
-                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
-                
-                updateViews(ibModel);
-                break;
-                
-            case ROUTED_MESSAGE:
-                RoutedMessageModel rmModel = (RoutedMessageModel)oMessage.value;
-            
-                CADMainPane = new TO_RoutedMessage(rmModel, mainTextPane.getDocument());
-                CADMainPane.addObserver(CADFooterPane);
-                
-                if(!pageLocationSaved)
-                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
-                
-                updateViews(rmModel);
-                break;
-                
-            case BLANK_SCREEN:
-                BlankScreenModel bsModel = (BlankScreenModel)oMessage.value;
-                
-                CADMainPane = new CADMainView(mainTextPane.getDocument());
-                CADMainPane.addObserver(CADFooterPane); 
-
-                if(!pageLocationSaved)
-                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
-                
-                updateViews(bsModel);
-                break;              
-                
-            case SCREEN_UPDATE:
-                CADFooterPane.updateStatus(CADScreenModel.updateStringToMap(
-                        (String)oMessage.value));
-                break;
-                
-            case TIME_UPDATE:
-                CADFooterPane.updateTime((String)oMessage.value);           
-                break;
-                
-            case ROUTED_MESSAGE_COUNT_UPDATE:
-                CADFooterPane.updateRoutedMessageCount((Integer)oMessage.value);
-                break;
-                
-            case ROUTED_MESSAGE_UNREAD_UPDATE:
-                CADFooterPane.updateUnreadMessages((Boolean)oMessage.value);
-                break;
-                
-            case CAD_INFO_MESSAGE:
-                CADFooterPane.displayInfoMessage((String)oMessage.value);
-                break;
-        }           
+            switch(oMessage.type) 
+            {
+                case INCIDENT_INQUIRY:
+                    IncidentInquiryModel iiModel = (IncidentInquiryModel)oMessage.value;
+
+                    CADMainPane   = new II_IncidentInquiry(iiModel, mainTextPane.getDocument());
+                    CADMainPane.addObserver(CADFooterPane);
+
+                    if(!pageLocationSaved)
+                        pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                    updateViews(iiModel);               
+
+                    break;
+
+                case INCIDENT_SUMMARY:
+                    IncidentSummaryModel isModel = (IncidentSummaryModel)oMessage.value;
+
+                    CADMainPane   = new SA_IncidentSummary(isModel, mainTextPane.getDocument());
+                    CADMainPane.addObserver(CADFooterPane);
+
+                    if(!pageLocationSaved)
+                        pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                    updateViews(isModel);
+                    break;
+
+                case INCIDENT_BOARD:
+                    IncidentBoardModel ibModel = (IncidentBoardModel)oMessage.value;
+
+                    CADMainPane   = new IB_IncidentBoard(ibModel, mainTextPane.getDocument());
+                    CADMainPane.addObserver(CADFooterPane);     
+
+                    if(!pageLocationSaved)
+                        pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                    updateViews(ibModel);
+                    break;
+
+                case ROUTED_MESSAGE:
+                    RoutedMessageModel rmModel = (RoutedMessageModel)oMessage.value;
+
+                    CADMainPane = new TO_RoutedMessage(rmModel, mainTextPane.getDocument());
+                    CADMainPane.addObserver(CADFooterPane);
+
+                    if(!pageLocationSaved)
+                        pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                    updateViews(rmModel);
+                    break;
+
+                case BLANK_SCREEN:
+                    BlankScreenModel bsModel = (BlankScreenModel)oMessage.value;
+
+                    CADMainPane = new CADMainView(mainTextPane.getDocument());
+                    CADMainPane.addObserver(CADFooterPane); 
+
+                    if(!pageLocationSaved)
+                        pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                    updateViews(bsModel);
+                    break;              
+
+                case SCREEN_UPDATE:
+                    CADFooterPane.updateStatus(CADScreenModel.updateStringToMap(
+                            (String)oMessage.value));
+                    break;
+
+                case TIME_UPDATE:
+                    CADFooterPane.updateTime((String)oMessage.value);           
+                    break;
+
+                case ROUTED_MESSAGE_COUNT_UPDATE:
+                    CADFooterPane.updateRoutedMessageCount((Integer)oMessage.value);
+                    break;
+
+                case ROUTED_MESSAGE_UNREAD_UPDATE:
+                    CADFooterPane.updateUnreadMessages((Boolean)oMessage.value);
+                    break;
+
+                case CAD_INFO_MESSAGE:
+                    CADFooterPane.displayInfoMessage((String)oMessage.value);
+                    break;
+            }
+        }
     }
     
