2017-07-30 66 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