2017-09-02 46 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