2017-02-27 29 views
0

这是我启动我的应用程序的主要方法。 JFrame加载成功。当我添加WHILE循环部分做一些后台工作,我的一些数据显示在我的JFrame上显示我的JFrame无法正确加载(见下图)。循环后的Java JFrame加载错误

public static void main(String[] args) throws IOException { 

     if (Config.checkIfConfigExists() == true) { 

      /* 
      * Starten der Anwendung 
      */ 
      EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        try { 

         Main window = new Main(); 

         window.frmServicenowHelper.invalidate(); 
         window.frmServicenowHelper.validate(); 
         window.frmServicenowHelper.repaint(); 

         window.frmServicenowHelper.setVisible(true); 

         while (true) { 

          // the part that makes it error 

         } 



        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 

     } else { 

      Notifications.alertMSGConfig("Config not found. Create one?"); 

     } 
    } 

正如你所看到的JFrame冻结并显示其背景。

JFrame loading error

我发现它是与Threads和正确处理(我想我使用的东西在错误的点),但我不能要自己解决。

背景知识:

我想从一个URL的JSON字符串(该方法的工作 - 我想打电话给&显示框上的结果),每5分钟(因此而环)。

编辑:

我尝试这样做,其正确地加载帧而是使得环(我需要)没用:

while (true) { 

          Main window = new Main(); 

          window.frmServicenowHelper.invalidate(); 
          window.frmServicenowHelper.validate(); 
          window.frmServicenowHelper.repaint(); 

          window.frmServicenowHelper.setVisible(true); 

          break; 


         } 
+0

你在重新粉刷之前睡了一段时间吗?您确定多个线程不在JFrame上运行吗? –

+0

@AlexBaranowski我在任何时候都没有睡觉 - 我很确定它只有一个线程。添加** break; **使其工作,但使循环无用,我需要 – piguy

回答

0

我找到了解决办法:

我简单地创建新的Thread(后台处理)使用:

public static void main(String[] args) { 

    Runnable r = new Runnable() { 
     public void run() { 
      runYourBackgroundTaskHere(); 
     } 
    }; 

    new Thread(r).start(); 
    //this line will execute immediately, not waiting for your task to complete 
} 

来源:Create threads in java to run in background