簡體   English   中英

修改的Java SWT控件不變

[英]Java SWT control modified doesn't change

我正在編寫一些用於聊天的程序:服務器和客戶端。

他們兩個都有使用SWT制作的GUI。 服務器始終運行良好。

另一方面,客戶端的GUI沒有。 當我連接到服務器時,客戶端詢問所連接的客戶端,服務器用X消息回答,每個消息一個。 我檢查了服務器是否真的發送了名稱,客戶端是否收到了名稱。

但是,即使我已經收到消息,有時GUI也會顯示它們,而其他時候卻沒有。 即使在同一執行中,某些名稱也可以放入GUI中,而其他名稱則不能。

我認為這可能是SWT的問題,尤其是有關修改GUI的方法。

如您所料,我正在使用線程,甚至修改了GUI。 因為我想從線程修改GUI,所以必須使用方法“ Display.asyncExec”,因此,每次對GUI進行更改時,都會執行以下操作:

OurDisplay.asyncExec( new Runnable() {

    public void run()
    {

        MyText.append("#The user " + OurName + " has asked us about other clients\n");

    }

});

我不知道問題出在哪里,因為服務器使用相同的功能,但是運行正常。

也許我會注意到,在主程序(包括服務器和客戶端)中,我正在使用其他代碼,以便在關閉窗口(Shell)之前無法完成程序的執行:

while (!ServerShell.isDisposed())
{
    if (!ourDisplay.readAndDispatch())
        ourDisplay.sleep();
}

任何想法?

謝謝

-編輯-對第1條評論的回答-(我無法發表評論,我不知道為什么)

我沒有 我嘗試使用“ syncExec”方法來讓我的線程等待GUI的修改。 但是,這都不起作用。

我不知道如何查看顯示隊列,我在尋找它。 謝謝你的主意。

我將嘗試捕獲Runnable可能引發的異常。 我將報道新聞。

進行一些嘗試/捕獲后,您將看到一個典型的問題:在GUI繁忙時嘗試對其進行更新。 該異常將被抑制,直到您將其撕裂為止。

我假設您那里有一個Eclipse RCP應用程序-對嗎? 請使用Eclipse Job處理來更新GUI(UIJob)。 這比那些asyncExec(Runnable)調用要好上千倍,因為Eclipse框架將確定GUI更新的時間。

http://www.vogella.com/articles/EclipseJobs/article.html

Lars Vogel在工作處理方面有很棒的教程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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