ClientGUI: fix process not exiting when ProgressMonitor is cancelled by user
authorTJ <hacker@iam.tj>
Sat, 6 Jun 2015 13:14:11 +0000 (14:14 +0100)
committerTJ <hacker@iam.tj>
Sat, 6 Jun 2015 13:14:11 +0000 (14:14 +0100)
src/uk/ac/ntu/n0521366/wsyd/client/ClientGUI.java

index a9e3d1f..c00c4ad 100644 (file)
@@ -99,6 +99,10 @@ public class ClientGUI extends javax.swing.JFrame implements NetworkMessageEvent
     private EditProfile registrationDialog;
     private ProgressMonitor _progressMonitor;
     WaitForServerSocial _waitForServerSocial;
+    /**
+     * Prevent some operations if a shutdown is in progress.
+     */
+    boolean _shutdownInProgress = false;
 
     /**
      * Member record for this client's user.
@@ -599,11 +603,17 @@ public class ClientGUI extends javax.swing.JFrame implements NetworkMessageEvent
         switch (evt.getPropertyName()) {
             case "progress":
                 int progress = 1000 * (Integer) evt.getNewValue();
+                if (_progressMonitor.isCanceled()) {
+                    _shutdownInProgress = true;
+                    _waitForServerSocial.cancel(true);
+                    _progressMonitor.close();
+                    exitCleanly();
+                }
                 _progressMonitor.setProgress(progress);
                 break;
             case "state":
                 SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
-                if (state.equals(SwingWorker.StateValue.DONE)) {
+                if (!_shutdownInProgress && state.equals(SwingWorker.StateValue.DONE)) {
                     _progressMonitor.close();
                     try {
                         if (_waitForServerSocial.get()) {