2017-07-30 96 views
0

大家好,我需要一些幫助,在這裏 我想使網站檢查器,並把結果放在一個Jframe,但它似乎比我想象的更難 ,因爲當我在Jframe與線程循環.. Jframe凍結,沒有任何工作..是否有一個簡單的爲什麼要這樣做? 對不起我的英語不好..我是來自敘利亞:) 你的朋友,這是我的代碼在Jframe中添加循環

private void formWindowActivated(java.awt.event.WindowEvent evt) {          

while(true) 
{ 
try { 
    Thread.sleep(500); 
} catch (InterruptedException ex) { 
    Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 
    try{ 

    InetAddress[] addresses = InetAddress.getAllByName("www.google.com"); 
    for (InetAddress address : addresses) { 
    if (address.isReachable(10000)) 
    { 
     t1.setText("okay"); 

     System.out.println("Connected "+ address); 
    } 
    else 
    { 
     System.out.println("Failed "+address); 
    } 
    } 
    }catch (Exception e) 
    {} 

    } 
+0

你應該看看[Swing Timers](https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)。 –

+1

*當我使用Thread *在Jframe中創建一個循環時:您並未在發佈的代碼中啓動任何線程。閱讀SwingWorker的文檔 –

+0

你應該在單獨的'Thread/Runnable'中創建JFrame和輪詢循環 - 參見https://stackoverflow.com/questions/17107728/using-a-thread-loop-to-update-a -jframe?RQ = 1 –

回答

2

不要在監聽器使用Thread.sleep()方法。此代碼將在Event Dispatch Thread (EDT)上執行,該線程負責處理事件並重新繪製GUI。通過使用sleep(),可以防止GUI響應事件並重新繪製自己。

相反,你需要創建一個單獨的線程來做你的網站檢查。

閱讀關於Concurrency in Swing的Swing教程中的部分以獲取更多信息。您應該可以使用教程中描述的Swing Worker