[英]how to make my program to wait for a particular thread and also not affecting my GUI's interactivity?
我有一個基於MVC的程序,該程序從Internet獲取數據並開始解析它,當然在網絡程序中我們需要有線程。
我有一堂課,用於從互聯網讀取數據,如下所示:
public class WebReader extends Thread
{
private String result="";
public String getResult()
{
return result;
}
public void setResult(String t)
{
result = t;
}
public WebReader(get args here)
{
//initializing
}
public void getData()
{
//call the big getData(args);
}
public void getData(Sargs)
{
//magics happens here
}
@Override
public void run()
{
//call getData()
}
}
對於在我的模型中使用此類,我一直在使用以下代碼:
//inside a function
WebReader wr = new WebReader(args);
wr.start();
wr.join();
String s = wr.getResult();
this.parseData(s);
我知道通過使用join()將線程連接到當前線程,並且這樣做,我的GUI會一直停留到完整的結果來自網絡。 但是我想確保WebReader類先讀取數據,然后繼續執行該操作?
SwingWorker是一種內置機制,用於在后台線程上執行長時間運行的任務,因此不會阻止EDT。 根據整體設計和應用程序的意圖,您可能會發現它比某些替代解決方案更容易。
編輯:我假設您的GUI在Swing中...? 如果不是,此答案將不適用。
在沒有給您確切解決方案的情況下,我可以考慮一些事項。 您將需要在GUI中執行某些操作以指示用戶應等待。 它可能只有等待/忙碌光標或某種進度監視器。 根據所使用的GUI技術,實現這些方法的方法有所不同。 當您向用戶使用通知機制時,它將有一種在數據到達時喚醒的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.