2013-08-25 50 views
0

我有一個線程每次啓動時更新我的​​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(); 
    } 
} 

螞蟻,這是我怎麼稱呼它

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

請仔細閱讀[併發中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/),尤其要看看['SwingWorker']](http:// docs .oracle.com/javase/tutorial/uiswing/concurrency/worker.html),它只是爲此目的而設計的... – MadProgrammer

回答

3

它看起來像你的代碼,您所提交的戰勝它的目的:從你的線程代碼到主要的GUI線程進行網絡調用並且可以等待。

您應該從線程代碼中的網絡調用中獲得結果,然後使用invokLater來填充結果的GUI。