altosui: Handle serial calls from swing thread
authorKeith Packard <keithp@keithp.com>
Sun, 27 Mar 2011 07:48:07 +0000 (00:48 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 27 Mar 2011 07:48:07 +0000 (00:48 -0700)
Calls from the swing thread cannot be canceled as there's no way to
put up the cancel dialog. In this case, simply use the 5 second
timeout and fail if no communication occurs within that amount of time.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosSerial.java

index 88b38bb176f01ad00db321de36fb698d2c14019c..57e1344860686d1684583e183f14b7c4eeeb041f 100644 (file)
@@ -137,7 +137,6 @@ public class AltosSerial implements Runnable {
        boolean timeout_started = false;
 
        private void stop_timeout_dialog() {
-               System.out.printf("stop_timeout_dialog\n");
                Runnable r = new Runnable() {
                                public void run() {
                                        if (timeout_dialog != null)
@@ -148,7 +147,6 @@ public class AltosSerial implements Runnable {
        }
 
        private void start_timeout_dialog_internal() {
-               System.out.printf("Creating timeout dialog\n");
                Object[] options = { "Cancel" };
 
                JOptionPane     pane = new JOptionPane();
@@ -170,10 +168,7 @@ public class AltosSerial implements Runnable {
        private boolean check_timeout() {
                if (!timeout_started && frame != null) {
                        timeout_started = true;
-                       System.out.printf("Starting timeout dialog\n");
-                       if (SwingUtilities.isEventDispatchThread()) {
-                               start_timeout_dialog_internal();
-                       } else {
+                       if (!SwingUtilities.isEventDispatchThread()) {
                                Runnable r = new Runnable() {
                                                public void run() {
                                                        start_timeout_dialog_internal();
@@ -208,16 +203,22 @@ public class AltosSerial implements Runnable {
        }
 
        public String get_reply() throws InterruptedException {
+               if (SwingUtilities.isEventDispatchThread())
+                       System.out.printf("Uh-oh, reading serial device from swing thread\n");
                flush_output();
                AltosLine line = reply_queue.take();
                return line.line;
        }
 
        public String get_reply(int timeout) throws InterruptedException {
+               boolean can_cancel = true;
+               if (SwingUtilities.isEventDispatchThread()) {
+                       can_cancel = false;
+                       System.out.printf("Uh-oh, reading serial device from swing thread\n");
+               }
                flush_output();
-               if (remote) {
+               if (remote && can_cancel) {
                        timeout = 300;
-                       System.out.printf("Doing remote timout\n");
                }
                abort = false;
                timeout_started = false;
@@ -227,7 +228,7 @@ public class AltosSerial implements Runnable {
                                stop_timeout_dialog();
                                return line.line;
                        }
-                       if (!remote || check_timeout())
+                       if (!remote || !can_cancel || check_timeout())
                                return null;
                }
        }
@@ -362,7 +363,6 @@ public class AltosSerial implements Runnable {
                try {
                        flush_input();
                } finally {
-                       System.out.printf("Sending tilde\n");
                        printf ("~\n");
                        flush_output();
                }