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
@@ -71,6 +74,26 @@ public void actionPerformed(ActionEvent event) {
71
74
updateTimer = new Timer (33 , this ); // redraw serial monitor at 30 Hz
72
75
updateTimer .start ();
73
76
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
+
74
97
closed = false ;
75
98
}
76
99
@@ -90,6 +113,11 @@ public void suspend() throws Exception {
90
113
close ();
91
114
}
92
115
116
+ public void dispose () {
117
+ super .dispose ();
118
+ portExistsTimer .stop ();
119
+ }
120
+
93
121
public void resume (BoardPort boardPort ) throws Exception {
94
122
setBoardPort (boardPort );
95
123
0 commit comments