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) { } + } + } + } }