From e61c02b51e069aa58b36f59b9ca8e7c8284bc93a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 21 Jan 2014 22:13:01 -0800 Subject: [PATCH] altosui: Handle serial-port startup errors in idle-monitor Trap exceptions during idle monitor startup and report them. Signed-off-by: Keith Packard --- altosui/AltosIdleMonitorUI.java | 40 +++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 88779c93..7ca935b6 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -132,8 +132,35 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl return constraints(x, width, GridBagConstraints.NONE); } + void idle_exception(JFrame owner, Exception e) { + if (e instanceof FileNotFoundException) { + JOptionPane.showMessageDialog(owner, + ((FileNotFoundException) e).getMessage(), + "Cannot open target device", + JOptionPane.ERROR_MESSAGE); + } else if (e instanceof AltosSerialInUseException) { + JOptionPane.showMessageDialog(owner, + String.format("Device \"%s\" already in use", + device.toShortString()), + "Device in use", + JOptionPane.ERROR_MESSAGE); + } else if (e instanceof IOException) { + IOException ee = (IOException) e; + JOptionPane.showMessageDialog(owner, + device.toShortString(), + ee.getLocalizedMessage(), + JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(owner, + String.format("Connection to \"%s\" failed", + device.toShortString()), + "Connection Failed", + JOptionPane.ERROR_MESSAGE); + } + } + public AltosIdleMonitorUI(JFrame in_owner) - throws FileNotFoundException, AltosSerialInUseException, TimeoutException, InterruptedException { + throws FileNotFoundException, TimeoutException, InterruptedException { device = AltosDeviceUIDialog.show(in_owner, Altos.product_any); remote = false; @@ -141,6 +168,15 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl remote = true; serial = device.getSerial(); + + AltosLink link; + try { + link = new AltosSerial(device); + } catch (Exception ex) { + idle_exception(in_owner, ex); + return; + } + bag = getContentPane(); bag.setLayout(new GridBagLayout()); @@ -209,7 +245,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl pack(); setVisible(true); - thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, (AltosLink) new AltosSerial (device), (boolean) remote); + thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, link, (boolean) remote); status_update = new AltosFlightStatusUpdate(flightStatus); -- 2.30.2