另外,用isCurrentlyOwned(),只能判断当前程序的一个实例占用了端口,比如我自己用java写的javaterminal,当一个javaterminal占用着COM1,运行另一个javaterminal,用isCurrentlyOwned()可以判断被占用,而且用getCurrentOwner()可以获得此占用了端口的程序名称。 但是,如果被诸如putty之类的程序占用了端口,用isCurrentlyOwned()判断结果是未被占用,返回true,用getCurrentOwner()得到的结果是 Port currently not owned 。
try {
sPort = (javax.comm.SerialPort) portId.open("SerialDemo", 5000);
} catch (javax.comm.PortInUseException e) {
log.error(this,e);
return;
}comm.jar你catch javax.comm.PortInUseException这个异常就可以了,红字部分换做处理的代码,比如什么串口XXX被占用一类。
我现在想着用JNI,用VC做个DLL,然后调用。
但是,如果被诸如putty之类的程序占用了端口,用isCurrentlyOwned()判断结果是未被占用,返回true,用getCurrentOwner()得到的结果是 Port currently not owned 。
to:hongming1129 我也有过这样的想法,不过想想之后就打消了。期待问题解决。关注~
try - catch是最好的办法啦.做个递归.public void getPort(port)
{
try {
sPort = (javax.comm.SerialPort) portId.open("SerialDemo", 5000);
} catch (javax.comm.PortInUseException e) {
getPort(new Random().nextInt(xxxx));
}
}
就是还不知道怎么样获取占用端口的程序。