Белый экран на кадре с Thread.sleep()

У меня есть JFrame с кнопкой, и когда я нажимаю ее, я показываю другой кадр, меняю вещи на втором кадре и через 3 секунды закрываю его. Я пробовал это, но когда появляется второй кадр, он белый.

private void smallButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
        NormalCarEntry entryTicket = new NormalCarEntry();
        entryTicket.setVisible(true);
        java.util.Date date = new java.util.Date();
        SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm:ss");
        String entryTime = formatTime.format(date);
        String query = "SELECT `ticket` FROM `" + DB + "` ORDER BY `ticket` DESC LIMIT 1";
        st = connection.createStatement();
        ResultSet res = st.executeQuery(query);
        while (res.next()) 
            entryTicket.entryTicketLabel.setText(res.getInt("ticket") + "");
        entryTicket.entryDate.setText(formatDate2.format(date));
        entryTicket.entryHour.setText(entryTime);





        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        entryTicket.setVisible(false);


    } catch (SQLException ex) {
        Logger.getLogger(mainView.class.getName()).log(Level.SEVERE, null, ex);
    }        

}     

NormalCarEntry — это второй упомянутый кадр.

Кто-нибудь может мне помочь?


person user3772284    schedule 24.06.2014    source источник


Ответы (1)


Никогда не вызывайте Thread.sleep(...) в потоке событий Swing. Это переводит вызываемый поток в спящий режим, а поскольку поток событий отвечает за всю графику Swing и взаимодействие с пользователем, ваш графический интерфейс переходит в спящий режим. Вместо этого используйте Swing Timer.

Кроме того, вы захотите поработать над своими навыками поиска, так как этот вопрос часто задают на этом сайте, и небольшой поиск приведет вас к правильному решению без необходимости добавлять еще один такой же вопрос здесь.

Кроме того, вы не захотите показывать второй JFrame, поскольку приложение обычно будет иметь только один JFrame. Вместо этого либо поменяйте представления с помощью CardLayout, либо используйте JDialog для зависимого диалогового окна.

person Community    schedule 24.06.2014