0

起動するたびにスイングインターフェースを更新するスレッドがあります。クラスの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();
}
4

1 に答える 1

3

あなたのコードはその目的を破っているようです。あなたのスレッドから、ネットワーク呼び出しを行い、待機しているメインの GUI スレッドにコードを送信しています。

スレッド コード内のネットワーク呼び出しから結果を取得し、それを使用invokLaterして GUI に結果を入力する必要があります。

于 2013-08-25T11:20:56.827 に答える