簡體   English   中英

如何使我的程序等待特定的線程,又不影響GUI的交互性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM