Hallo, ich bin noch recht neu in der JavaFX Welt. Und bin nun auf ein Problem gestossen, dass ich einfach nicht lösen kann.
In meinem Programm öffne ich einen Seriellen Port, um mit dem Arduino kommunizieren zu können. Das ganze mache ich mit der jssc Lib. Soweit funktioniert auch alles ohne Probleme.
Jetzt will ich aber, dass der Port wieder geschlossen wird, wenn ich die Stage über das Kreuz oben rechts schliesse. Das wollte ich über die stop() Methode in der Main Klasse machen. Habe also eine Instanz von meiner Controller Klasse in der stop() Methode angelegt. Worauf ich immer eine NullPointException bekomme, wenn ich die Stage schliesse.
Gibt es irgendeine Möglichkeit, den Port in meiner Controller Klasse zu schliessen, wenn die Stage geschlossen wird?
Main Klasse:
Ausschnitt Controller Klasse:
SerialPortHandler Klasse:
In meinem Programm öffne ich einen Seriellen Port, um mit dem Arduino kommunizieren zu können. Das ganze mache ich mit der jssc Lib. Soweit funktioniert auch alles ohne Probleme.
Jetzt will ich aber, dass der Port wieder geschlossen wird, wenn ich die Stage über das Kreuz oben rechts schliesse. Das wollte ich über die stop() Methode in der Main Klasse machen. Habe also eine Instanz von meiner Controller Klasse in der stop() Methode angelegt. Worauf ich immer eine NullPointException bekomme, wenn ich die Stage schliesse.
Gibt es irgendeine Möglichkeit, den Port in meiner Controller Klasse zu schliessen, wenn die Stage geschlossen wird?
Main Klasse:
Java:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Test App");
primaryStage.setScene(new Scene(root, 1500, 700));
primaryStage.show();
}
@Override
public void stop() {
}
public static void main(String[] args) {
launch(args);
}
}
Ausschnitt Controller Klasse:
Java:
public SerialPort serialPort;
private boolean portOpen = false;
private SerialPortHandler serialPortHandler;
private SerialPortReader serialPortReader;
public void btnConnect() {
int baudRate = 0;
if (baudCombo.getValue() != null && portCombo.getValue() != null) {
System.out.println("BaudCombo: " + baudCombo.getValue());
System.out.println("Port: " + portCombo.getValue());
try {
if (!portOpen) {
serialPort = new SerialPort(portCombo.getValue());
switch (baudCombo.getValue()) {
case "300":
baudRate = SerialPort.BAUDRATE_300;
break;
case "1200":
baudRate = SerialPort.BAUDRATE_1200;
break;
case "4800":
baudRate = SerialPort.BAUDRATE_4800;
break;
case "9600":
baudRate = SerialPort.BAUDRATE_9600;
break;
default:
System.out.print("Lass hier nochmal ein Error Fenster anzeigen");
break;
}
portOpen = true;
serialPortHandler = new SerialPortHandler(serialPort, baudRate);
} else {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Fehler");
alert.setHeaderText(null);
alert.setContentText("Port ist bereits geöffnet!");
alert.showAndWait();
}
if(serialPort.isOpened()) {
lblConnection.setText("Verbunden");
}
} catch (Exception ex) {
System.out.println(ex);
}
} else {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Fehler");
alert.setHeaderText(null);
alert.setContentText("Es muss ein Port und eine Baudrate gewählt werden!");
alert.showAndWait();
}
}
SerialPortHandler Klasse:
Java:
public class SerialPortHandler {
private SerialPort serialPort;
private SerialPortReader serialPortReader;
private String readData = "";
private int baudRate;
public SerialPortHandler(final SerialPort serialPort, final int baudRate) {
this.serialPort = serialPort;
this.baudRate = baudRate;
portHandler();
}
private void portHandler() {
serialPortReader = new SerialPortReader(serialPort);
try {
serialPort.openPort();
serialPort.setParams(baudRate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.addEventListener(serialPortReader);
} catch (SerialPortException ex) {
System.err.print(ex);
}
}
public SerialPortReader readedData() {
return serialPortReader;
}
}