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
@@ -71,6 +74,26 @@ public void actionPerformed(ActionEvent event) {
7174 updateTimer = new Timer (33 , this ); // redraw serial monitor at 30 Hz
7275 updateTimer .start ();
7376
77+ ActionListener portExists = new ActionListener () {
78+ @ Override
79+ public void actionPerformed (ActionEvent ae ) {
80+ try {
81+ if (!Base .getDiscoveryManager ().discovery ().contains (boardPort )) {
82+ if (!closed ) {
83+ suspend ();
84+ }
85+ } else {
86+ if (closed ) {
87+ resume (boardPort );
88+ }
89+ }
90+ } catch (Exception e ) {}
91+ }
92+ };
93+
94+ portExistsTimer = new Timer (1000 , portExists ); // check if the port is still there every second
95+ portExistsTimer .start ();
96+
7497 closed = false ;
7598 }
7699
@@ -90,6 +113,11 @@ public void suspend() throws Exception {
90113 close ();
91114 }
92115
116+ public void dispose () {
117+ super .dispose ();
118+ portExistsTimer .stop ();
119+ }
120+
93121 public void resume (BoardPort boardPort ) throws Exception {
94122 setBoardPort (boardPort );
95123
0 commit comments