JPanel 在 panel.setVisible 后不显示(真)

JPanel not showing after panel.setVisible(true)

我正在开发桌面应用程序,我的目标是使用 Jsoup.connect() 获取给定的 URL。 工作正常,但需要几秒钟,所以我想我会在它不完整时显示一个 "loading" 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);
}

问题是什么?

我不熟悉 Jsoup API,所以只是猜测,但是..你确定方法 Jsoup.connect() 是同步的吗?也许它只是在一个单独的线程上启动连接并立即returns,然后另一个线程在连接建立时调用一些处理程序?

在那种情况下,您的 JPanel 可见性会在 true 之后立即切换为 false,因此实际上您根本看不到它。如果是这种情况,那么您应该更改在建立连接时调用的处理程序的可见性,而不是在 btnRefreshSelectedActionPerformed 方法中。