3

java library ( jar )外部ソフトウェアによって呼び出される多数の API を含む を作成しています。API の 1 つがブロッキング API になり、非常に時間のかかる操作を実行します。

操作の定期的なフィードバック (% 完了) をクライアントに提供できる方法が必要です。

NOTEライブラリであるため、プログレス バーの Java Swing メカニズムを使用してプログレス パーセンテージを取得および更新することはできません。私が検索するものはすべて、どういうわけかそれにつながります。

とにかくこれを行うことはありますか?

Answer Update

回答を投稿してくれたすべての人に感謝します。把握するのに役立ちました。jar で次のインターフェースを公開しました。クライアント ワーカー スレッドが登録され、進行状況の更新をリッスンします。それに応じて進行状況バーが更新されます。

void LongAPI(){
while{
do work ; 
fireprogress();
     }
}
public void addProgressListener(Listener listener) {
    listeners.add(listener);

}

public void removeProgressListener(Listener listener) {
    listeners.add(listener);
}

private void fireProgress(double pourcent) {
    for (Listener listener : listeners) {
        listener.setProgress(pourcent);
    }
}

Listener、すべてのクライアントが実装する抽象インターフェイスです。クライアントが必要に応じて UI を更新できる setProgress プロパティがあります。

4

2 に答える 2

4

私はそれに PropertyChangeSupport オブジェクトaddPropertyChangeListener(...)removePropertyChangeListener(...)メソッドを与えます。内部的には、サポート オブジェクトを起動するセッターを使用して、バインドされたプロパティを作成します。このようにして、対象のプロパティが変更されたことを標準的な方法で外部ライブラリに通知できます。Swing ベースのライブラリの場合は、サポート オブジェクトに追加されたすべての PropertyChangeListeners が Swing イベント スレッドで通知されるように、特に SwingPropertyChangeSupport オブジェクトを使用することを検討してください。

たとえば、次の質問に対する回答をご覧ください。

于 2013-10-18T04:05:23.887 に答える