使用RXTX与RS232通信时,如何获取指定的应用名称(appname)?
获取RXTX串口连接的appname
其实在RXTX里获取你设置的appname有两种常见场景,我给你拆解一下:
1. 自己的程序里复用appname(最简单的方式)
既然这个"Test"是你自己在open方法里传入的,最直接的办法就是把它存成一个类的成员变量,之后需要用的时候直接调用就行,根本不用额外去“获取”:
// 把appname存为类的成员变量,方便后续复用 private String mySerialAppName = "Test"; public void connect(String portName) throws Exception { CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); if (portIdentifier.isCurrentlyOwned()) { System.out.println("端口已被占用"); } else { // 直接用预先定义好的成员变量传入 SerialPort serialPort = (SerialPort) portIdentifier.open(mySerialAppName, 2000); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); // 之后如果需要用到appname,直接用mySerialAppName就行 System.out.println("当前使用的appname: " + mySerialAppName); } }
2. 获取当前端口的占用者appname
如果你是想检查某个串口当前被哪个应用占用(不管是不是自己的程序),可以用CommPortIdentifier的getCurrentOwner()方法,这个方法会返回对方打开端口时传入的appname:
public void checkPortOwner(String portName) throws Exception { CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); if (portIdentifier.isCurrentlyOwned()) { // 这里就能拿到占用端口的appname String ownerAppName = portIdentifier.getCurrentOwner(); System.out.println("端口" + portName + "已被" + ownerAppName + "占用"); } else { System.out.println("端口未被占用"); } }
注意点
getCurrentOwner()只有在isCurrentlyOwned()返回true的时候才会返回有效的appname,否则会返回null或者空字符串,调用的时候要做判空处理。- RXTX的
SerialPort或CommPort实例本身没有提供直接获取appname的API,因为这个参数是由CommPortIdentifier来跟踪管理的,所以要么自己保存传入的值,要么通过端口标识符的方法来查询。
内容的提问来源于stack exchange,提问作者Atian
相关产品推荐
相关产品推荐

