簡體   English   中英

無限循環通過列表,枚舉

[英]infinite loop through a list, enumeration

所以我在swing中構建一個應用程序,它將ping一個url或url列表以顯示機器狀態。 因此,如果機器斷開連接,它將顯示為斷開連接。 我有一個機器列表,但我需要它間隔永遠循環,所以我可以知道機器的狀態。 我知道你無法重置枚舉計數,所以我堅持一個解決方法。

目前,執行ping和枚舉的代碼部分如下:

class WorkerThread extends Thread { 
DefaultListModel model;

public WorkerThread(DefaultListModel aModel) { 
    model = aModel; 
} 

public void run() { 
Pinging ping = new Pinging();
int num ;
Enumeration<String> e;


for ( e= model.elements(), num=0; e.hasMoreElements(); num ++){
    String element = e.nextElement();
    for (int i = 0; i<5; i++){
    ping.reachUrl(element);
      //ping.timer(5, e.nextElement()); 
        final int pos = num;
        EventQueue.invokeLater(new Runnable() { 
            public void run() { 
                //ping.reachUrl(e.nextElement());
                String name = ping.getName();
                String addr = ping.getAddr();
                boolean reach = ping.getReach();
                int time = ping.getTime();
                model.set(pos, name+"  " + addr+"  " + reach + "  " + time);
                //model.add(pos, name+"  " + addr+"  " + reach + "  " + time);
                //model.set(pos, "Hello");

            } 
        }); 

        yield(); 
    }



}

} 

}

使用List而不是Enumeration

保持一個記錄您在列表中的位置的int ,當您到達列表的末尾時,從頭開始。

但實際上,您需要為您正在觀看的每個URL設置一個單獨的線程。 你當然不希望在事件線程上進行ping調用。 使用SwingWorker ,以便它可以在后台運行,並在done()使用done()方法更新GUI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM