Java 通过列表、枚举的无限循环

Java 通过列表、枚举的无限循环,java,swing,infinite-loop,enumeration,Java,Swing,Infinite Loop,Enumeration,因此,我正在swing中构建一个应用程序,它将ping一个url或url列表以显示机器状态。因此,如果机器断开连接,它将显示为断开连接。我有一个机器列表,但我需要它以一定的间隔循环,这样我就可以知道机器的状态。我知道你不能重置枚举计数,所以我一直在寻找解决方法 目前,执行ping和枚举的代码部分如下: class WorkerThread extends Thread { DefaultListModel model; public WorkerThread(DefaultListModel

因此,我正在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(); 
    }



}

} 
类WorkerThread扩展线程{
默认列表模型;
公共WorkerThread(DefaultListModel aModel){
模型=模型;
} 
public void run(){
ping ping=新ping();
int-num;
e;
对于(e=model.elements(),num=0;e.hasMoreElements();num++){
String元素=e.nextElement();

对于(int i=0;i使用
列表
而不是
枚举

维护一个
int
,记录您在列表中的位置,当您到达列表末尾时,从开始处重新开始


但实际上,您希望为正在监视的每个URL都有一个单独的线程。而且您当然不希望对事件线程执行ping调用。请使用
SwingWorker
,这样它就可以在后台运行,并且仍然可以使用
done()更新GUI
方法。如果没有枚举,请参阅,有关示例,请参阅