summaryrefslogtreecommitdiff
path: root/altosui/AltosIdleMonitorUI.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-01-21 22:13:01 -0800
committerKeith Packard <keithp@keithp.com>2014-01-21 22:13:01 -0800
commite61c02b51e069aa58b36f59b9ca8e7c8284bc93a (patch)
treea644a6cbf82c0d7f5bbad61fa7256f8587d00f8a /altosui/AltosIdleMonitorUI.java
parent42922b40fc695bdaa92e3fb0b41a248f7df918d0 (diff)
altosui: Handle serial-port startup errors in idle-monitor
Trap exceptions during idle monitor startup and report them. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosui/AltosIdleMonitorUI.java')
-rw-r--r--altosui/AltosIdleMonitorUI.java40
1 files 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);