循环后Java JFrame加载错误

时间:2017-02-27 11:00:29

标签: java multithreading jframe

这是我启动应用程序的主要方法。 JFrame成功加载。当我添加 WHILE-Loop部分进行一些后台工作时,我处理一些数据以显示在我的JFrame上,我的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-String(这个方法正在工作 - 我想调用&在帧上显示结果)每5分钟一次(因此是while循环)。

修改

我尝试过这样可以正确加载框架但是使循环(我需要)无用:

while (true) {

                            Main window = new Main();

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

                            window.frmServicenowHelper.setVisible(true);

                            break;


                        }

1 个答案:

答案 0 :(得分: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