首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 串口枚舉重複輸出 5 次:外層循環多次調用導致

     編輯:程式設計綜合問答

現象

代碼枚舉串口並打印,結果每個端口信息重複出現 5 次。

代碼邏輯分析

int x = 0;
Enumeration portList1 = CommPortIdentifier.getPortIdentifiers();
while (portList1.hasMoreElements()) {
    x++;
    test_buffer[x] = ((CommPortIdentifier) portList1.nextElement()).getName();
    System.out.println("第" + x + "串口" + test_buffer[x]);
    // ...
}
test_1 = new String[x];
for (int j = 0; j < x; j++) {
    test_1[j] = test_buffer[j+1];
    System.out.println("第" + j + "串口:" + test_1[j]);
}

輸出顯示:
第1串口COM1 ... 第4串口LPT2(第一輪)
第0串口:COM1 ... 第3串口:LPT2(第二輪)
然後整個雙輪輸出重複 5 次。

根因

此枚舉代碼被放在一個外層循環或定時器/監聽器回調中,每次觸發執行一次,共觸發 5 次。單次執行邏輯正常(輸出兩輪:1-base 和 0-base),但外層重複調用導致整體重複 5 次。

排查建議

  1. 搜索代碼中調用此枚舉邏輯的方法,檢查是否在 while(true)、TimerTask、SerialPortEventListener、按鈕點擊事件中被多次觸發。
  2. 添加守衛變量防止重複枚舉:
    private static boolean enumerated = false;
    public void enumeratePorts() {
        if (enumerated) return;
        enumerated = true;
        // 枚舉邏輯
    }
  3. 或將枚舉移至初始化階段(構造函數/靜態塊/Application 啟動),按需緩存結果。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved