gpt4 book ai didi

关闭和重新打开串行连接时的 Java Comms PortInUseException

转载 作者:行者123 更新时间:2023-11-29 09:00:04 25 4
gpt4 key购买 nike

我制作了一个通过 rs232 连接到设备的程序。我在运行 Windows Vista 的笔记本电脑上使用带有 Java Comms 的 Java 1.7 运行它。我正在使用多产的 USB 转串口适配器连接到此设备。在我关闭连接并尝试从同一个应用程序再次重新打开它之前,一切都很好。我得到以下异常:

javax.comm.PortInUseException: Port currently owned by Unknown Windows Application

当我完全关闭我的应用程序并重新启动它时,我能够再次连接到该端口。我在另一台(较旧的)笔记本电脑上没有这个问题,它仍然有一个板载 rs232 端口。我在这个网站上看到了一些类似的问题(例如:herehere too),但是他们的解决方案对我不起作用。

我的问题:

  • 为什么我的端口仍由我的程序拥有?
  • 我应该或可以如何关闭我的端口以避免此异常?
  • 使用 USB 转串口适配器对这个问题有何影响?在此先感谢您的任何帮助或建议!

这是我打开连接的方式:

private void connectToPort(String preferredPort) { 
portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

if (portId.getName().equals(preferredPort)) {
try {
serialPort = (SerialPort) portId.open("PumpController", 2000);
} catch (PortInUseException e) {
System.err.println(e);

}
try {
outputStream = serialPort.getOutputStream();
inputStream = serialPort.getInputStream();

printStream = new PrintStream(outputStream);
} catch (IOException e) {
System.err.println(e);
}
try {
serialPort.addEventListener((SerialPortEventListener) this);
} catch (Exception e) {
System.err.println(e);
}
serialPort.notifyOnDataAvailable(true);


try {
serialPort.setSerialPortParams(38400,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
System.err.println(e);
}
}
}
}
connectedToPort = true;
}

此方法关闭我的连接:

 public void closeConnection() throws IOException{
try{
serialPort.removeEventListener();
outputStream.close();
inputStream.close();
serialPort.close();
connectedToPort = false;
}catch(NullPointerException e){
System.err.println(e);
}
}

最佳答案

要解决端口所有权的冲突,您可以注册一个 PortOwnershipListener,以便在另一个应用程序想要使用该端口时通知您。然后您可以关闭该端口,其他应用程序将获得它,或者忽略该请求,其他程序将获得 PortInUseException。

关于关闭和重新打开串行连接时的 Java Comms PortInUseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com