SWT没有更多的句柄

Windows XP对每个进程限制10000个用户句柄,每个桌面会话总共限制32000个。 但是,当我运行4或5 SWT过程,每个消耗不超过2000个用户句柄,SWT没有更多句柄exception将被抛出。

有谁知道为什么?

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

org.eclipse.swt.SWTError: No more handles 

您可能正在创建资源(如FontImageGC对象),您没有正确处理。 您可能需要花点时间阅读SWT 管理操作系统资源指南。

要确定是否确实如此,我可以推荐这篇有用的文章: 诊断SWT / RCP Windows应用程序中的句柄泄漏 ,它解释了哪些资源,并建议使用Process Explorer或DPus来定位泄漏。

一个同事也强烈推荐Sleak ,一个SWT为重点的应用程序,实际上可以告诉你剩余的内存剩余的资源。

为了对SWT处理的内容有非常深入的理解, 这篇Sybase文章描述了三种类型:用户对象,GDI对象或内核对象句柄,每个句柄都有自己的最大值。

您的程序中可能存在某种资源泄漏。 使用以下实用程序( http://www.eclipse.org/articles/swt-design-2/sleak.htm )作为查找swt资源泄漏的简单方法。 我用它来清理我正在工作的一个rcp应用程序中的一大堆问题

限制不是10000个句柄。 应用程序可以使用远远超过10000个句柄(如果RAM允许的话)。 限制在GDI和用户资源(图形元素)上。

SWT应用程序使用什么类型的资源(可以通过taskmgr查看)? 这将有助于了解什么是泄漏。

为了记录,如果这是我的问题,我会接受@保罗的答案。 不过,如果遇到这个问题,我想添加一个潜在的帮助别人的秘密问题。

检查您的字体使用情况。

在我的情况下,我的手柄并不是那么高,但是我正在新建字体实例,并将它们交给StyledText样式。 我不得不声明我想要使用的字体一次,班级。 这为我修好了。

在eclipse 3.6 SR1中,我也看到了这个错误,原来是由于数百个编辑器选项卡处于打开状态。 关闭标签修复了错误。

请尝试以下步骤:

  • 去eclipse主目录(你安装eclipse的地方),然后去plugins文件夹
  • 从com.google。*开始删除所有最近安装的插件
  • 尝试重新启动你的Eclipse,它可能会重新开始工作(为我工作。)
  • 尝试从谷歌安装旧的插件或只需要一次。 (我会试试这个)

在我的系统Windows7 x64上,当TeamViewer 8正在运行时(www.teamviewer.com),我可以将其复制。 当我停止TeamViewer时,错误消失。

你可以看看: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 402983

希望有所帮助。

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

就我而言,我通过Citrix XenApp运行带SP1的Win7和Spring Tool Suite 3.7.2(Eclipse Mars 4.5.1)。 当我在包资源管理器Java编辑器之间切换时发生此错误。

我的解决方案
在Win7下运行services.msc,找到“Tablet PC Input Service”,停止它。

希望这可以帮助别人。