通过线程和摆动显示更新延迟

时间:2013-08-25 11:13:20

标签: java multithreading swing

每次启动时我都有一个更新我的swing界面的线程。即使我使用invokeLater()类的SwingUtilities方法,我仍然有这个延迟。

这是我的线程代码的运行:

public void run() {
    final int timeout=2000;
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            try {
                if (InetAddress.getByName(host).isReachable(timeout)){
                    ServerFrame.listModel.addElement(InetAddress.getByName(host).getHostName() + '\n');
                }
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Ant这就是我所说的

for (int i =63;i<66 ;i++) {
    ping p = new ping("192.168.1."+i);
    p.start();
}

1 个答案:

答案 0 :(得分:3)

看起来您的代码正在破坏其目的:从您的线程中,您将代码提交到执行网络调用的主GUI线程,并且需要等待。

您应该在线程代码中从网络调用中获取结果,然后使用invokLater用结果填充GUI。