我正在为聊天制作几个程序:服务器和客户端。
它们都有一个用 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 可能抛出的异常。我会报道新闻。