【发布时间】:2012-12-23 05:55:36
【问题描述】:
我正在为聊天制作几个程序:服务器和客户端。
它们都有一个用 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 可能抛出的异常。我会报道新闻。
【问题讨论】:
-
您是否尝试过设置断点/调试语句来确定 (a) Runnables 是否确实被放入了显示队列,以及 (b) Runnables 是否稍后执行(它们不是只是默默地抛出异常)?潜在的解决方案因该信息而异,它可能会帮助您缩小问题范围。
标签: java multithreading user-interface swt