繁体   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