From 006de838bbb096b9443863a46b8a125b1e6b5600 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 27 Mar 2011 00:48:07 -0700 Subject: [PATCH] altosui: Handle serial calls from swing thread 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 --- altosui/AltosSerial.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java index 88b38bb1..57e13448 100644 --- a/altosui/AltosSerial.java +++ b/altosui/AltosSerial.java @@ -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(); } -- 2.30.2