Почему InvokeLater заставляет мой JFrame отображаться неправильно?

Хорошо, я прочитал поиск по всей сети, и я еще не нашел решение своей проблемы, возможно, я упускаю что-то простое, поэтому вот я ...

У меня довольно большой проект, который обрабатывает рабочие заказы для ремонтного бизнеса. Это все связано с базой данных, много-много страниц кода и классов. Но я только добавил небольшой фрагмент кода во внешний интерфейс, который по существу проверяет наличие новых сообщений в нашей области заметок.

Во всяком случае, я показываю простойJFrame с двумяJLabels, пока отдельный поток запрашивает базу данных. Все это происходит в начале программы. Проблема моя маленькая "пожалуйста, подождите"JFrame приходит с рамкой, но без мужества, без фона и нетJLabels, во время ожидания (которое является остальной частью загрузки программы, а не потока базы данных), после слов, которые он отображает, но к тому времени он теряет свою точку.

Я написал следующий пример программы. Отображает простойJFrame (Проверка сообщенийGUI: aJFrame с двумяJLabels, ничего больше) спит в течение 5 секунд, затем отображает пример (основная программа)JFrameзатем мгновенно закрывается (System.exit(0)) в этом примере, конечно, моя настоящая программа продолжает делать намного больше. Я обнаружил, чтоinvokeLater кажется, вызывает проблему. Как только таймер отключения закончится, появится окно, но код для его отображения был дан передThread.sleep команда, и должно было быть сделано в этом порядке правильно?

Мой вопрос почемуinvokeLater потому что мойJFrame не правильно отображать?

Это мое понимание того, что цельinvokeLater Это потому, что элементы работают в правильном потоке событий AWT, что заставляет меня думать, что это окно будет нарисовано правильно. В любом случае, я уверен, что упускаю что-то очевидное. Я закомментировалinvokeLater часть в коде ниже, и он работает правильно, если вы положите его обратно, это не ...

Спасибо заранее.

package javaapplication6;

public class Example extends javax.swing.JFrame {          
    public Example() {
        System.out.println("Example started");
        setBounds(100,100,200,200);

        System.out.println("cmGUI instantiated");
        CheckingMessagesGUI cmGUI = new CheckingMessagesGUI();
        System.out.println("Set cmGUI visible");
        cmGUI.setVisible(true);
        cmGUI.validate();
        try {
            System.out.println("timer started");
            Thread.sleep(5000);
            System.out.println("timer done");
        } catch(InterruptedException e){
        }
        System.exit(0);
    }

    public static void main(String[] args) {
        /*java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() { */
        System.out.println("Started");
        System.out.println("example Instantiated");
        Example example = new Example();
        System.out.println("example visible");
        example.setVisible(true);
        /*      }
        });
        */
    }
}

ОБНОВЛЕНИЕ: чтобы уточнить, я понимаю,Thread.sleep() будет блокировать все, но разве мой CheckingMessagesGUI не должен быть полностью прорисован до того, как я вызову sleep? Это проблема.

Ответы на вопрос(4)

Ваш ответ на вопрос