Рендеринг Java Swing JFrame перед продолжением - PullRequest
0 голосов
/ 09 июля 2011

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

Итак, есть ли возможность сообщить Swing сначаласделать окно, а затем сделать все остальное?Что-то вроде рендеринга окна первым в очереди исключений?

Ответы [ 2 ]

3 голосов
/ 09 июля 2011
2 голосов
/ 09 июля 2011

Вы могли бы сделать это, отобразив JFrame и затем вызвав

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        myLongMethod();
    }
});

Но это действительно плохая идея. Графический интерфейс будет заморожен на весь срок действия метода.

Правильный способ сделать это - использовать фоновый поток. Но у Swing есть все, что нужно, чтобы сделать его безболезненным. Просто используйте SwingWorker. Документация по API хорошо написана и содержит примеры. Попробуйте сделать это, и если вы не можете, задайте другой вопрос и покажите код, который вы пробовали, чтобы кто-то помог вам.

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