Windows10 jssc.SerialPortException: openPort(); Тип исключения - Порт занят

Я новичок в Java, но не в программировании. Я пытаюсь понять, как использовать последовательный порт в Java. Я пытаюсь разработать код, который потребует несколько раз открывать и закрывать последовательный порт во время выполнения.

В моем тестовом коде я использую флажок, который, когда установлен, откроет последовательный порт и закроется, если не будет проверен. Каким-то образом после того, как я закрываю порт в первый раз, а затем снова открываю для второго, третьего и т. Д. Времени, я получаю ошибку освобождения.

Вот журналы консоли

Open Port
Close Port
Open Port
jssc.SerialPortException: Port name - COM1; Method name - openPort(); Exception type - Port busy.
Close Port
Open Port
jssc.SerialPortException: Port name - COM1; Method name - openPort(); Exception type - Port busy.

Я также нашел этот код и добавил его в код перед закрытием, но все еще не могу открыть порт во второй и последующих попытках...


if (serialPort != null && serialPort.isOpened ()) {
    serialPort.purgePort (1);
    serialPort.purgePort (2);
    serialPort.closePort ();
}

Надежда на кого-то может указать мне правильное направление или исправить мой код. Спасибо вам и заранее. Я использую Windows 10 64bit, кстати.

Вот мой тестовый код...

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import jssc.SerialPort;
import jssc.SerialPortException;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        primaryStage.setTitle("Serial Test");

        // CONNECT CheckBox
        CheckBox connectBox = new CheckBox("OPEN PORT");

        connectBox.setOnAction(e -> {
            SerialPort serialPort = new SerialPort("COM1");
            if (connectBox.isSelected()) {
                try {
                    System.out.println("Open Port");


                    if (serialPort != null && serialPort.isOpened ()) {
                          serialPort.purgePort (1);
                          serialPort.purgePort (2);
                          serialPort.closePort ();
                        }
                    if (serialPort.openPort()) serialPort.closePort();
                    serialPort.openPort();
                    serialPort.setParams( 115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                } catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            } else {
                try {
                    System.out.println("Close Port");
                    if (serialPort != null && serialPort.isOpened ()) {
                          serialPort.purgePort (1);
                          serialPort.purgePort (2);
                          serialPort.closePort ();
                        }
                } catch (SerialPortException ex) {
                    System.out.println(ex);
                }   
            }
        });
        StackPane root = new StackPane();
        root.getChildren().add(connectBox);
        primaryStage.setScene(new Scene(root, 400, 200));
        primaryStage.show();    
    }
}

1 ответ

Пожалуйста, убедитесь, что виртуальная машина не открыта. Это обычно случается со мной:D

Другие вопросы по тегам