Хорошо, что я прочитал обыск в Интернете, и я еще не нашел решение моей проблемы, возможно, я пропустил что-то простое, поэтому здесь я ...Почему InvokeLater вызывает неправильное отображение JFrame?
У меня есть довольно большой проект, который обрабатывает заказы на выполнение работ по ремонту. Все подключено к базе данных, многие страницы кода и классы. Но я просто добавил короткий код кода в интерфейс, который в основном проверяет новые сообщения в области заметок.
Во всяком случае, я показываю простой JFrame с двумя JLabel с в то время как отдельный поток запросов к базе данных. Все это происходит в начале программы. Проблема в том, что мой маленький «пожалуйста, подождите» JFrame подходит к своей рамке, но без кишок, нет фона и нет JLabel s, во время ожидания (это остальная часть загрузки программы, а не поток базы данных) после этого он отображает, но к тому времени его отсутствует его точка.
Я написал следующую примерную программу. Он отображает простой JFrame (CheckingMessagesGUI: а JFrame с двумя JLabel с, не более) не спит в течение 5 сек затем показывает пример (основная программа) фрейму, а затем мгновенно закрывается (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);
/* }
});
*/
}
}
UPDATE: Чтобы уточнить, я понимаю Thread.sleep()
будет блокировать все, но не должен мой CheckingMessagesGUI уже был полностью использован, прежде чем я вызываю сон? Это проблема.
Этот форум используется программистами на самых разных языках. Теги тега должны помочь сразу определить домен, чтобы читатели могли фильтровать вопросы, которые могут им помочь. Будет ли java и awt хорошими тегами для вашего вопроса? –