我制作了一个通过rs232连接到设备的程序。我在运行Windows Vista的笔记本电脑上使用带有Java Comms的java 1.7运行它。我正在使用多产的USB转串口适配器连接到此设备。这一切都很好,直到我关闭连接并尝试从同一个应用程序再次重新打开它。我得到以下异常:
javax.comm.PortInUseException:Unknown Windows目前拥有的端口 应用
当我完全关闭我的应用程序并重新启动它时,我可以再次连接到该端口。我没有在另一台(较旧的)笔记本电脑上出现此问题,该笔记本电脑仍然具有板载rs232端口。我在这个网站上看到了一些类似的问题(例如:here和here too),但是他们的解决方案对我不起作用。
我的问题:
以下是我打开连接的方式:
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);
}
}
答案 0 :(得分:0)
要解决端口所有权冲突,可以注册PortOwnershipListener,以便告知您是否有其他应用程序要使用该端口。然后你可以关闭端口,其他应用程序将获取它,或忽略该请求,其他程序将获得PortInUseException。