summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-03-27 00:48:07 -0700
committerKeith Packard <keithp@keithp.com>2011-03-27 00:48:07 -0700
commit006de838bbb096b9443863a46b8a125b1e6b5600 (patch)
tree79390d32305b91ae18870981e6a992c90ac54605
parentf23d0f3cbf1fb0c8eab497e266625f6410b69ba3 (diff)
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 <keithp@keithp.com>
-rw-r--r--altosui/AltosSerial.java20
1 files 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();
}