11package processing .app ;
22
33import cc .arduino .packages .BoardPort ;
4+ import cc .arduino .packages .DiscoveryManager ;
45import processing .app .legacy .PApplet ;
56
67import javax .swing .*;
910import java .awt .event .ActionListener ;
1011import java .awt .event .WindowAdapter ;
1112import java .awt .event .WindowEvent ;
13+ import java .util .List ;
1214
1315@ SuppressWarnings ("serial" )
1416public abstract class AbstractMonitor extends JFrame implements ActionListener {
@@ -17,6 +19,7 @@ public abstract class AbstractMonitor extends JFrame implements ActionListener {
1719
1820 private StringBuffer updateBuffer ;
1921 private Timer updateTimer ;
22+ private Timer portExistsTimer ;
2023
2124 private BoardPort boardPort ;
2225
@@ -73,6 +76,26 @@ public void actionPerformed(ActionEvent event) {
7376 updateTimer = new Timer (33 , this ); // redraw serial monitor at 30 Hz
7477 updateTimer .start ();
7578
79+ ActionListener portExists = new ActionListener () {
80+ @ Override
81+ public void actionPerformed (ActionEvent ae ) {
82+ try {
83+ if (!Base .getDiscoveryManager ().discovery ().contains (boardPort )) {
84+ if (!closed ) {
85+ suspend ();
86+ }
87+ } else {
88+ if (closed ) {
89+ resume (boardPort );
90+ }
91+ }
92+ } catch (Exception e ) {}
93+ }
94+ };
95+
96+ portExistsTimer = new Timer (1000 , portExists ); // check if the port is still there every second
97+ portExistsTimer .start ();
98+
7699 closed = false ;
77100 }
78101
@@ -92,6 +115,11 @@ public void suspend() throws Exception {
92115 close ();
93116 }
94117
118+ public void dispose () {
119+ super .dispose ();
120+ portExistsTimer .stop ();
121+ }
122+
95123 public void resume (BoardPort boardPort ) throws Exception {
96124 setBoardPort (boardPort );
97125
0 commit comments