Windows10 jssc.串行端口异常: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 64位。

这是我的测试代码。。。

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();    
    }
}

请确保没有打开任何虚拟机。这通常发生在我身上:D

相关内容

  • 没有找到相关文章

最新更新