在Jframe中添加循环

时间:2017-07-30 19:59:36

标签: java multithreading swing loops jframe

大家好,我需要一些帮助 我正在尝试制作网站检查程序并将结果放在Jframe中,但它似乎比我想象的更难 因为当我在Jframe中使用Thread进行循环时,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 )
    {}

   }

1 个答案:

答案 0 :(得分:2)

不要在侦听器中使用Thread.sleep()。此代码将在Event Dispatch Thread (EDT)上执行,Swing Worker是负责处理事件和重新绘制GUI的线程。通过使用sleep(),可以防止GUI响应事件并重新绘制自身。

相反,您需要创建一个单独的线程来进行网站检查。

阅读Concurrency in Swing上Swing教程中的部分以获取更多信息。您可能应该使用教程中描述的{{1}}。