2017-09-02 108 views
1

我试图通过COM端口在我的Java应用程序的帮助下实现传输数据。首先,我决定像这样创建SerialPort对象。COM端口不检测与jSSC

SerialPort serialPort = new SerialPort("COM1"); 

try { 
     serialPort.openPort(); 
} catch (SerialPortException ex) { 
     ex.printStackTrace(); 
} 

但是有一个jssc.SerialPortException:端口名称 - COM1;方法名称 - openPort();异常类型 - 未找到端口。

然后我试图确定,做COM端口我有:

String[] portNames = SerialPortList.getPortNames(); 
    for (int i = 0; i < portNames.length; i++) { 
     System.out.println(portNames[i]); 
    } 

结果令人遗憾:port名字是空的。

请你给我指点一些东西。

回答

0

我查看Windows系统的代码,这是罚款: 我的USB转串口转换器系统成为COM4

import jssc.SerialPort; 
import jssc.SerialPortException; 
import jssc.SerialPortList; 

public class Main { 
    public static void main(String[] args) { 
     SerialPort serialPort; 
     serialPort = new SerialPort("COM4"); 

     try { 
      serialPort.openPort(); 
     } catch (SerialPortException ex) { 
      ex.printStackTrace(); 
     } 

     String[] portNames = SerialPortList.getPortNames(); 
     for (int i = 0; i < portNames.length; i++) { 
      System.out.println(portNames[i]); 
     } 
    } 
} 

此外,我进入设备管理器来检查COM端口。所以,如果主题发起人的“portNames是空的”。也许有设备驱动程序。他应该在那里检查。

+0

这不能提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/17957314) – jotik

0

有多种方法可以解决这个问题。

  1. 当应用程序启动时,循环查找可用的COM端口,而不是仅在找到端口时才打开该端口。您还可以添加延迟,因为Windows需要一些时间来检测和激活COM端口才能使用。 Windows加载驱动程序并在插入USB-UART时分配一个COM端口号。这意味着如果我们每次将COM4插入相同的模块到相同的物理端口。所以不用担心。
  2. 如果您想制作一些更强大的解决方案,可以编写自己的解决方案,并使用一些提供USB-UART热插拔检测的库。因此,当我们插入USB-UART模块时,该库会告诉我们分配了哪个端口号,并从我们的应用程序中打开它。我知道一个这样的图书馆是SerialPundit