【问题标题】:SWT: No more Control handlesSWT:没有更多的控制句柄
【发布时间】:2016-10-17 11:59:13
【问题描述】:

使用 Eclipse,我为我的应用程序创建了一个带有 2 个选项卡的表单编辑器。一个选项卡用于 GUI 支持,另一个选项卡用于普通文本编辑器。在 GUI 页面中,我一直在使用数百个 SWT 控件,例如表格、部分、按钮等。

问题是,当我在应用程序中使用表单编辑器打开 20 多个文件时,出现异常“SWT:没有更多句柄”。我可以理解,对于要创建到表单编辑器的控件,没有更多的控制句柄了。如果有足够的句柄可用,我可以检查控制句柄的可用性并继续打开文件。否则我无法打开文件本身。

有没有办法解决这个问题?

【问题讨论】:

    标签: java swt


    【解决方案1】:

    你很可能已经达到了极限。请注意,不同平台(macOS、Linux、Windows)之间的句柄数量差异很大,因此如果您计划在不同平台上运行它,则需要在所有平台上进行测试。

    如果您使用派生自 Resource 的 SWT 类(ColorFontImageCursor,...),那么您必须在完成后调用对象上的 dispose用它。否则会泄漏句柄。

    您还应该尝试共享这些资源 - 例如,不要每次都创建新的Color。使用处理共享颜色的管理器类,管理器类还可以处理资源的处置。

    JFace 提供了诸如 ColorRegistryFontRegistryImageRegistry 之类的管理器类,它们可能很有用。

    如果这还不够,您将减少如此多的控件,也许您可​​以使用弹出对话框在按下按钮时显示一些信息。

    【讨论】:

    • 感谢您的回复。
    • 当我们尝试在 eclipse 中使用多页编辑器打开更多数量的清单文件(大约 80 个文件)时,会发生相同的异常(没有更多句柄)并且 eclipse 本身会崩溃。
    • 正如我所说,无法解决的句柄数量有限制。仔细管理资源可确保您不会提前达到限制,但在某些平台上您最终会达到限制。
    • 有没有办法找到剩余控制手柄的可用性?这样我就可以通知用户没有控制句柄的警告消息。
    • 我不知道。这非常依赖于平台,在我的 Mac 上我认为没有限制。
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2011-10-31
    • 2015-01-04
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2013-12-24
    • 2010-12-20
    相关资源
    最近更新 更多