SWT不再有句柄。

27

Windows XP对于每个进程的用户句柄有10000个的限制,每个桌面会话总共有32000个的限制。但是当我运行4或5个SWT进程时,每个进程消耗不超过2000个用户句柄,总是会抛出SWT No More Handles异常。

有人知道为什么吗?

8个回答

45

如果我理解正确,你可能会遇到以下异常:

org.eclipse.swt.SWTError: No more handles
您可能正在创建资源(例如FontImageGC对象),但未能正确处理它们。建议您花一些时间阅读 SWT 指南中的“管理操作系统资源”章节,以确定是否出现了这种情况。
为了确定是否确实存在此问题,我可以推荐这篇有用的文章:“SWT/RCP Windows 应用程序中诊断句柄泄漏”,其中解释了什么是资源,并建议使用Process ExplorerDPus来定位泄漏。
此外,我的同事强烈推荐Sleak,它是一个专注于 SWT 的应用程序,可以告诉您哪些资源仍然在残留内存中。
如果您需要深入了解 SWT 所做的句柄,这篇 Sybase 文章描述了三种类型的句柄:用户对象、GDI 对象或内核对象句柄,每种句柄都有自己的最大值。

7

2

句柄的限制不是10000个。如果内存允许,应用程序可以使用远远多于10000个句柄。限制在于GDI和用户资源(图形元素)。

SWT应用程序使用了什么资源(您可以通过任务管理器查看)?这将有助于了解哪些资源泄漏了。


1

我在Eclipse 3.6 SR1中也遇到过这个错误,结果发现是因为有数百个编辑器标签未关闭。关闭这些标签后,错误得以解决。


1

就记录而言,如果这是我的问题,我会接受@Paul的答案。然而,有一个狡猾的问题,我想在这里添加,以帮助其他人解决这个问题...

检查您对字体的使用。

在我的情况下,我的句柄并不是很高,而是新建了字体实例并将它们交给StyledText样式。我必须声明我想要使用的字体一次,类级别。这为我解决了问题。


0
尝试以下步骤:
  • 进入Eclipse的主目录(安装Eclipse的位置),然后进入插件文件夹
  • 删除所有最近安装的以com.google.*开头的插件
  • 尝试重新启动Eclipse,它可能会再次开始工作(对我有效)。
  • 尝试安装来自Google的旧插件或只需安装您需要的插件。(我将尝试这个。)

0

0

我也遇到了这个问题,但现在我已经解决了。

在我的情况下,我正在通过Citrix XenApp运行Win7 SP1和Spring Tool Suite 3.7.2(Eclipse Mars 4.5.1)。当我在“包资源管理器”和“Java编辑器”之间切换时,就会出现此错误。

我的解决方案:
在Win7中运行services.msc,找到“平板电脑输入服务”,停止它。

希望这可以帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接