2017-08-18 9 views
0

私はデスクトップアプリケーションで作業しています。私の目標はJsoup.connect()で特定のURLを取得することです。 うまく動作しますが、数秒かかるので、完了していない間に「読み込み中の」gifや何かを表示させてしまいます。 同じボタンをクリックすると読み込みJPanelを取得して表示します。panel.setVisible(true)の後に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()は同期していますか?おそらく、それはちょうど別のスレッドで接続を開始し、ただちに戻ります。そして、接続が確立されたら、もう一方のスレッドはハンドラを呼び出しますか?

この場合、trueの後はJPanelの可視性が直ちにfalseに切り替わるため、実際にはJPanelの可視性はまったく表示されません。この場合、btnRefreshSelectedActionPerformedメソッドではなく、接続が確立されたときに呼び出されるハンドラの可視性を変更する必要があります。

+0

SwingWorkerがトリックをしました、ありがとう! –

関連する問題