啷哩个小吒吒 2018-01-19 10:00 采纳率: 50%
浏览 1650
已采纳

java RXTX做串口通信,怎么唯一确定某个设备的串口?

由于串口号是系统分配的,更换接口串口号会变动,C++是可以获取串口驱动供应商的,java怎么获取?

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-01-19 15:37
    关注

    https://stackoverflow.com/questions/6362775/getting-device-driver-information-related-to-a-com-port

     Example
    String keyPath = "SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_067b&Pid_2303\\";
    String device1 = "5&75451e6&0&1";
    System.out.println("First COM device: " + getComNumber(keyPath + device1));
    
    Code
    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    
    // Given a registry key, attempts to get the 'FriendlyName' value
    // Returns null on failure.
    //
    public static String getFriendlyName(String registryKey) {
        if (registryKey == null || registryKey.isEmpty()) {
            throw new IllegalArgumentException("'registryKey' null or empty");
        }
        try {
            int hkey = WinRegistry.HKEY_LOCAL_MACHINE;
            return WinRegistry.readString(hkey, registryKey, "FriendlyName");
        } catch (Exception ex) { // catch-all: 
            // readString() throws IllegalArg, IllegalAccess, InvocationTarget
            System.err.println(ex.getMessage());
            return null;
        }
    }
    
    // Given a registry key, attempts to parse out the integer after
    // substring "COM" in the 'FriendlyName' value; returns -1 on failure.
    //
    public static int getComNumber(String registryKey) {
        String friendlyName = getFriendlyName(registryKey);
    
        if (friendlyName != null && friendlyName.indexOf("COM") >= 0) {
            String substr = friendlyName.substring(friendlyName.indexOf("COM"));
            Matcher matchInt = Pattern.compile("\\d+").matcher(substr);
            if (matchInt.find()) {
                return Integer.parseInt(matchInt.group());
            }
        }
        return -1;
    }   
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • hany2008 2018-01-21 01:27
    关注

    public static final ArrayList findPort() {

        //获得当前所有可用串口
        Enumeration<CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers();    
    
        ArrayList<String> portNameList = new ArrayList<>();
    
        //将可用串口名添加到List并返回该List
        while (portList.hasMoreElements()) {
            String portName = portList.nextElement().getName();
            portNameList.add(portName);
        }
    
        return portNameList;
    
    }
    
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 webapi的部署(标签-服务器)
  • ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
  • ¥15 C语言除0问题的检测方法
  • ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
  • ¥15 macos13下 ios交叉编译的问题
  • ¥15 bgz压缩文件怎么打开
  • ¥15 封装dll(引入了pcl的点云设计库)
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 小新14API2019想用bios调风扇