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>
boolean timeout_started = false;
private void stop_timeout_dialog() {
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)
Runnable r = new Runnable() {
public void run() {
if (timeout_dialog != null)
}
private void start_timeout_dialog_internal() {
}
private void start_timeout_dialog_internal() {
- System.out.printf("Creating timeout dialog\n");
Object[] options = { "Cancel" };
JOptionPane pane = new JOptionPane();
Object[] options = { "Cancel" };
JOptionPane pane = new JOptionPane();
private boolean check_timeout() {
if (!timeout_started && frame != null) {
timeout_started = true;
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();
Runnable r = new Runnable() {
public void run() {
start_timeout_dialog_internal();
}
public String get_reply() throws InterruptedException {
}
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 {
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");
+ }
+ if (remote && can_cancel) {
- System.out.printf("Doing remote timout\n");
}
abort = false;
timeout_started = false;
}
abort = false;
timeout_started = false;
stop_timeout_dialog();
return line.line;
}
stop_timeout_dialog();
return line.line;
}
- if (!remote || check_timeout())
+ if (!remote || !can_cancel || check_timeout())
try {
flush_input();
} finally {
try {
flush_input();
} finally {
- System.out.printf("Sending tilde\n");
printf ("~\n");
flush_output();
}
printf ("~\n");
flush_output();
}