2017-08-18 6 views
0

Je travaille sur une application de bureau, mon but est de récupérer une URL donnée avec Jsoup.connect(). Fonctionne bien, mais cela prend quelques secondes, donc j'ai pensé que je vais afficher un gif "chargement" ou quelque chose alors que ce n'est pas complet. Récupère et affiche le chargement JPanel pour le même clic.JPanel ne s'affiche pas après panel.setVisible (true)

Si je veux juste mettre mes JPanel visibles pour le bouton clic, fonctionne très bien (le code ci-dessous)

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

Mais quand j'ajoute la fetching url, mon groupe ne sera pas affiché, mais devrait le voir pour 1-3 s. Code:

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); 
} 

Quel est le problème?

Répondre

1

Je ne suis pas familier avec API Jsoup, donc juste deviner, mais .. êtes-vous sûr que la méthode Jsoup.connect() est synchrone? Peut-être qu'il initie simplement la connexion sur un thread séparé et revient immédiatement, puis l'autre thread appelle un gestionnaire lorsque la connexion est établie?

Dans ce cas, votre visibilité JPanel passe immédiatement à false après true, donc en pratique, vous ne la voyez pas du tout. Si c'est le cas, vous devez modifier la visibilité sur le gestionnaire appelé lorsque la connexion est établie plutôt que dans la méthode btnRefreshSelectedActionPerformed.

+0

Un SwingWorker a fait l'affaire, merci! –