1

我正在为聊天制作几个程序:服务器和客户端。

它们都有一个用 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();
}

任何想法?

谢谢

- 编辑 -对评论 nº1 的回答 - (我无法回答评论,我不知道为什么)

我没有。我已经尝试使用“syncExec”方法,以便让我的线程等待 GUI 的修改。然而,这都不起作用。

我不知道如何查看显示队列,我正在寻找它。谢谢你的主意。

我将尝试捕捉 Runnable 可能抛出的异常。我会报道新闻。

4

1 回答 1

0

编一些try/catch,你会看到一个典型的问题:在忙的时候试图更新一个GUI。异常被压制,直到你让它撕裂。

我假设您那里有一个 Eclipse RCP 应用程序 - 对吧?请使用 Eclipse 作业处理来更新 GUI (UIJob)。这比那些 asyncExec(Runnable) 调用好几千倍,因为 Eclipse 框架将计算 GUI 更新的时间。

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

Lars Vogel 有一个很棒的关于作业处理的教程。

于 2013-01-09T12:37:39.017 回答