Почему 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() заблокирует все, но не долженt Мои CheckingMessagesGUI уже полностью прорисованы, прежде чем я вызову sleep? Это проблема.

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

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