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