1
1
package processing .app ;
2
2
3
3
import cc .arduino .packages .BoardPort ;
4
+ import cc .arduino .packages .DiscoveryManager ;
4
5
import processing .app .legacy .PApplet ;
5
6
6
7
import javax .swing .*;
9
10
import java .awt .event .ActionListener ;
10
11
import java .awt .event .WindowAdapter ;
11
12
import java .awt .event .WindowEvent ;
13
+ import java .util .List ;
12
14
13
15
@ SuppressWarnings ("serial" )
14
16
public abstract class AbstractMonitor extends JFrame implements ActionListener {
@@ -17,6 +19,7 @@ public abstract class AbstractMonitor extends JFrame implements ActionListener {
17
19
18
20
private StringBuffer updateBuffer ;
19
21
private Timer updateTimer ;
22
+ private Timer portExistsTimer ;
20
23
21
24
private BoardPort boardPort ;
22
25
@@ -73,6 +76,26 @@ public void actionPerformed(ActionEvent event) {
73
76
updateTimer = new Timer (33 , this ); // redraw serial monitor at 30 Hz
74
77
updateTimer .start ();
75
78
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
+
76
99
closed = false ;
77
100
}
78
101
@@ -92,6 +115,11 @@ public void suspend() throws Exception {
92
115
close ();
93
116
}
94
117
118
+ public void dispose () {
119
+ super .dispose ();
120
+ portExistsTimer .stop ();
121
+ }
122
+
95
123
public void resume (BoardPort boardPort ) throws Exception {
96
124
setBoardPort (boardPort );
97
125
0 commit comments