2012-05-05 19 views
2

私はScalaを使ってSwingでHTTPを介してファイルを同時にダウンロードする複数のスレッドを開始するGUIアプリケーションを作成しています。ダウンロードのステータスを表示するには、JProgressBarの番号を使用したいと思います。明らかに、プログレスバーはイベントディスパッチスレッドから更新する必要があります。さらに、HTTPダウンロードコードをGUIとは別に保存したいと思います。スレッドの状態を監視する標準的な方法

これを行うにはどうすればいいのでしょうか? SwingWorkerはSwing固有であり、Observableは、オブザーバに渡されるパラメータがオブジェクトであり、キャストする必要があるという点でやや古風なようです。 Scalaは強力な現代語ですので、私が望むことをやるためのより簡単な方法があることを願っていました。

+1

可能重複[Java ProgressMonitorInputStream既存のJProgressBarを使用](http://stackoverflow.com/questions/8379398/java-progressmonitorinputstream-using-questions/9420778/connect-jprogressbar-with-download-process-in-java) existing-jprogressbar) – jtahlborn

答えて

0

スカラクロージャを使用して自分のリスナーコールバックシステムを実装することで、私が望むものを実現しました。

val listeners = new ListBuffer[Int => Unit] 

def registerListener(f: Int => Unit) { 
    if (!listeners.contains(f)) { 
    listeners.append(f) 
    } 
} 

、これはGUIで、ネストされたSwingWorkerの中に入る::次のコードは、ダウンロードクラスで行く//:[JavaでダウンロードプロセスをJProgressBarのを接続](HTTPの

downloader.registerListener(this.listener) 

def listener(progress: Int) { 
    SwingUtilities.invokeLater(new Runnable { 
    def run() { 
     progressBar.setValue(progress) 
     table.repaint() 
    } 
    }) 
} 
2

あなたのクラスに、ダウンロードの進捗状況を通知するPropertiesChangeListenerを受け入れるようにしてください。リスナーは、それに応じて進行状況バーを更新します。

+0

addPropertyChangeListenerはjava.awt.Componentのメンバーであり、GUIライブラリを使用しないこれを行う方法を探しています。 –

関連する問題