我正在編寫一個java library (jar)
,其中包含許多將由外部軟件調用的API。其中一個API將是一個阻塞API,並將執行可能相當長的操作。Java 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
是一個抽象的接口,所有的客戶端很多實現。它具有setProgress屬性,用戶可以根據需要更新其UI。
*「我希望有一個方法能夠提供操作客戶的定期反饋(%完成)」 * API是否實際提供任何手段來查詢完成?如果是的話,它應該是容易使用,從'SwingWorker'內更新進度條。如果不是,你能做的最好的是一個不確定的進度條。無論哪種方式,它返回到'JProgressBar'。那爲什麼它不適合? –
@AndrewThompson:我的猜測 - 它並不適用於觀察到的類,它有一定道理,因爲觀察者可能會被顯示的數據。它聞起來像他所需要的是一個很好的觀察者設計模式。 –
@rockstar持有EDT rulles,因爲'正反饋(%完成...'大概只有你的代碼 – mKorbel