JPanel не отображается после panel.setVisible(true)

Я работаю над настольным приложением, моя цель - получить указанный URL с Jsoup.connect(), Работает нормально, но это занимает пару секунд, поэтому я решил показать "загрузочный" gif или что-то еще, пока он не завершен. Получить и отобразить загрузочный JPanel для того же нажатия кнопки.

Если я просто хочу, чтобы моя JPanel была видимой для нажатия кнопки, она работает нормально (код ниже)

private void btnRefreshSelectedActionPerformed(ActionEvent e)
{
    panelRefresh.setVisible(true);
}

Но когда я добавляю выборку URL, моя Панель не будет отображаться, но должна видеть ее в течение 1-3 секунд. Код:

private void btnRefreshSelectedActionPerformed(ActionEvent e)
{
    panelRefresh.setVisible(true);
    //SwingUtilities.invokeLater(() -> panelRefresh.setVisible(true)); - still not working

    //do Jsoup.connect and other things (1-3 secs runtime)
    //...

    panelRefresh.setVisible(false);
}

В чем проблема?

1 ответ

Решение

Я не знаком с Jsoup API, так что просто угадай, но... ты уверен, что метод Jsoup.connect() синхронно? Возможно, он просто инициирует соединение в отдельном потоке и сразу же возвращает его, а затем другой поток вызывает некоторый обработчик, когда соединение установлено?

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

Другие вопросы по тегам