SWT:不再有控制手柄
SWT: No more Control handles
我使用 eclipse 为我的应用程序创建了一个带有 2 个选项卡的表单编辑器。一个选项卡用于 GUI 支持,另一个用于普通文本编辑器。在GUI页面中,我一直在使用数百个SWT控件,例如表格、部分、按钮等。
问题是当我在我的应用程序中使用表单编辑器打开超过 20 个文件时,出现异常 "SWT: No more handles"。我可以理解,没有更多的控制句柄来为表单编辑器创建控件。如果有足够的句柄可用,我可以检查控件句柄的可用性并继续打开文件。否则我无法打开文件本身。
有什么办法可以解决这个问题吗?
您可能已达到上限。请注意,不同平台(macOS、Linux、Windows)之间的句柄数量差异很大,因此如果您计划 运行 在不同平台上使用此功能,则需要在所有平台上进行测试。
如果您使用的是从 Resource
派生的 SWT classes(Color
、Font
、Image
、Cursor
、.. ..) 然后你必须在完成后调用对象上的 dispose
。否则会泄漏句柄。
您还应该尝试共享这些资源 - 例如不要每次都创建新的 Color
。使用管理器 class 处理共享颜色,管理器 class 也可以处理资源。
JFace 提供管理器 class,例如 ColorRegistry
、FontRegistry
和 ImageRegistry
,这可能很有用。
如果这还不够,您将减少如此多的控件,也许您可以使用弹出对话框在按下按钮时显示一些信息。
我使用 eclipse 为我的应用程序创建了一个带有 2 个选项卡的表单编辑器。一个选项卡用于 GUI 支持,另一个用于普通文本编辑器。在GUI页面中,我一直在使用数百个SWT控件,例如表格、部分、按钮等。
问题是当我在我的应用程序中使用表单编辑器打开超过 20 个文件时,出现异常 "SWT: No more handles"。我可以理解,没有更多的控制句柄来为表单编辑器创建控件。如果有足够的句柄可用,我可以检查控件句柄的可用性并继续打开文件。否则我无法打开文件本身。
有什么办法可以解决这个问题吗?
您可能已达到上限。请注意,不同平台(macOS、Linux、Windows)之间的句柄数量差异很大,因此如果您计划 运行 在不同平台上使用此功能,则需要在所有平台上进行测试。
如果您使用的是从 Resource
派生的 SWT classes(Color
、Font
、Image
、Cursor
、.. ..) 然后你必须在完成后调用对象上的 dispose
。否则会泄漏句柄。
您还应该尝试共享这些资源 - 例如不要每次都创建新的 Color
。使用管理器 class 处理共享颜色,管理器 class 也可以处理资源。
JFace 提供管理器 class,例如 ColorRegistry
、FontRegistry
和 ImageRegistry
,这可能很有用。
如果这还不够,您将减少如此多的控件,也许您可以使用弹出对话框在按下按钮时显示一些信息。