Как отобразить текст JLabel за 1 секунду? - PullRequest
3 голосов
/ 28 сентября 2011

Я хочу, чтобы мои сообщения об ошибках временно отображались в JLabel, а затем установите текст обратно на "". Но вместо этого похоже, что он просто пропускает настройку сообщения. Я прошел по коду и обнаружил, что он устанавливает текст, но по какой-то причине он не отображается. Я даже попробовал метод repaint (), но все равно ничего. Любая помощь будет принята с благодарностью.

Вот что у меня есть:

public void displayError(String msg){
    int ctr = 0;
    while(ctr<2){
        try {
            lblError.setText(msg);
            lblError.repaint();
            Thread.sleep(500);
        } catch (Exception e) {}
        ctr++;
    }
    lblError.setText("");
}

1 Ответ

8 голосов
/ 28 сентября 2011

Я предполагаю, что вы вызываете этот метод в потоке отправки событий. (Если нет, то так и должно быть, так как почти все звонки Swing должны выполняться там.)

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

http://download.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...