【问题标题】:adding loop in Jframe在 Jframe 中添加循环
【发布时间】:2017-07-30 19:59:36
【问题描述】:

大家好,我需要一些帮助 我正在尝试制作网站检查器并将结果放入 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 )
    {}

   }

【问题讨论】:

  • 你应该看看Swing Timers
  • 当我在 Jframe 中使用 Thread 循环时:您没有在发布的代码中启动任何线程。阅读 SwingWorker 的文档
  • 您应该在单独的Thread / Runnable 中创建 JFrame 和轮询循环 - 请参阅此处 stackoverflow.com/questions/17107728/…

标签: java multithreading swing loops jframe


【解决方案1】:

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

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

阅读 Concurrency in Swing 上的 Swing 教程部分了解更多信息。您可能应该使用教程中描述的Swing Worker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2019-07-07
    • 2015-02-19
    • 2014-04-04
    • 1970-01-01
    • 2020-07-09
    • 2011-07-08
    • 2013-12-11
    相关资源
    最近更新 更多