From e9a00eb38f3988a1fe28206bdfca618384bbda0f Mon Sep 17 00:00:00 2001 From: Zach Eveland Date: Sun, 1 Apr 2012 14:39:52 -0400 Subject: [PATCH] close SerialMonitor when port goes away suddenly (as when user presses Leonardo reset button) --- app/src/processing/app/SerialMonitor.java | 29 ++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/processing/app/SerialMonitor.java b/app/src/processing/app/SerialMonitor.java index 6eebf539e..fbeeff73f 100644 --- a/app/src/processing/app/SerialMonitor.java +++ b/app/src/processing/app/SerialMonitor.java @@ -28,8 +28,10 @@ import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.text.*; +import gnu.io.CommPortIdentifier; +import java.util.Enumeration; -public class SerialMonitor extends JFrame implements MessageConsumer { +public class SerialMonitor extends JFrame implements MessageConsumer, Runnable { private Serial serial; private String port; private JTextArea textArea; @@ -171,6 +173,9 @@ public class SerialMonitor extends JFrame implements MessageConsumer { } } } + + Thread thread = new Thread(this); + thread.start(); } protected void setPlacement(int[] location) { @@ -228,4 +233,26 @@ public class SerialMonitor extends JFrame implements MessageConsumer { } }}); } + + public void run() { + while (!Thread.interrupted()) { + if (serial != null) { + Enumeration portList = CommPortIdentifier.getPortIdentifiers(); + boolean portStillHere = false; + while (portList.hasMoreElements()) { + CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement(); + if (portId.getName().equals(port)) { + portStillHere = true; + } + } + if (!portStillHere) { + closeSerialPort(); + setVisible(false); + } + try { + Thread.sleep(100); + } catch (InterruptedException ex) { } + } + } + } }