我从javax.comm库中得到了一些奇怪的结果。我正在运行这个构造函数:
SerialPort port;
public Scale(String porttotry) {
CommPortIdentifier cpi = null;
try {
cpi = CommPortIdentifier.getPortIdentifier(porttotry);
//Open Port and establish stream
log.trace("Opening CPI: {}", cpi.getCurrentOwner());
port = (SerialPort) cpi.open("My Application", 2000);
log.trace("CPI opened");
//... configuration stuff
} catch (PortInUseException ex) {
log.error("{}: Port in use by {}", porttotry, cpi.getCurrentOwner());
} catch (NoSuchPortException ex) {
log.error("No such port as {}", porttotry);
}
}
真正奇怪的是,当端口未使用时,CommPortIdentifier.open(String, int)
似乎正在抛出PortInUseException
。日志输出显示
TRACE[10:19:03.147]规模:72开放CPI:当前未拥有端口
错误[10:19:05.149]比例:98 COM4:端口正在被当前不属于的端口使用
第一条日志行对我来说意味着open()
应该成功,但它没有成功。我以前连接过这个设备,并从中获取了数据。这是一个奇怪的新错误。有人知道是什么原因造成的吗?我的直觉告诉我,这是一件棘手的事情,因为Windows有控球问题。我对任何想法都持开放态度,如果您需要,我会提供更多信息。
我不能确切地解释为什么会发生这个奇怪的错误,但我确实找到了一些解决方案。我认为这是Windows的占有欲,这似乎是正确的。当我关机,拔下设备插头,在设备仍然拔下的情况下通电,然后连接设备时,PortInUseException消失了。