我正在尝试创建一个Window
类,我可以使用它来打开多个窗口,它会自动添加一个事件处理程序来监听Swt.CLOSE
事件,并调用{{1调用它时的方法。
我的问题是:
在这种情况下,我是否需要倾听shell.dispose()
,或者只在我的主要方法中听取{{1}}?
我是否需要在自己的线程中运行每个窗口,或者所有窗口是否可以共享同一个UI线程?我已经阅读了一些关于多个窗口打开时与事件处理相关的错误行为的报告。
答案 0 :(得分:4)
我建议你总是有一个单独的UI线程,运行单个Display
对象。请参阅SWT: single vs. multiple displays或甚至强烈建议使用单个Display
对象的Eclipse documentation on Display:
使用SWT构建的应用程序几乎总是只需要一个显示器。特别是,SWT支持的某些平台不允许多个活动显示。
甚至有几个样本应用程序(例如this one)可以在SWT中演示多个shell。要关闭窗口时调用shell.dispose()
是可行的方法。
在关闭整个应用时,您应该只使用display.dispose()
,这基本上就是最后一步' - 请参阅this示例或this一个,或几乎SWT Snippets page上的任何代码段。
修改强>
Eclipse框架本身就是一个可以有多个窗口的应用程序示例 - 它仍然使用单个Display
,具有单个UI线程和共享事件系统。 Eclipse documentation on Threading Issues对此有一个基本的解释:
在任何GUI应用程序下,无论其语言或UI工具包如何,OS平台都会检测GUI事件并将其置于应用程序事件队列中。 [...]它确定哪个窗口和应用程序应该接收每个事件并将其放在应用程序的事件队列中。