27

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

有谁知道为什么?

4

8 回答 8

45

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

org.eclipse.swt.SWTError: No more handles

您可能正在创建未正确处理的资源(例如FontImage对象GC)。您可能需要花点时间阅读有关管理操作系统资源的 SWT 指南。

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

一位同事还强烈推荐Sleak,这是一个专注于 SWT 的应用程序,它实际上可以告诉您哪些资源剩余在剩余内存中。

为了从技术上理解 SWT 正在制作什么句柄,这篇 Sybase 文章描述了三种句柄:用户对象、GDI 对象或内核对象句柄,每种句柄都有自己的最大值。

于 2010-01-07T13:58:57.637 回答
7

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

于 2010-01-08T17:42:04.527 回答
2

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

SWT 应用程序使用什么样的资源(您可以通过 taskmgr 看到这一点)?这将有助于了解什么是泄漏。

于 2010-01-07T07:24:08.887 回答
1

作为记录,如果这是我的问题,我会接受@Paul 的回答。但是,我想在这里添加一个鬼鬼祟祟的问题,如果他们遇到这个问题,可能会帮助其他人......

检查您对字体的使用。

就我而言,我的句柄并没有那么高,而是我正在新建字体实例并将它们交给 StyledText 样式。我不得不声明我想使用一次的字体,类级别。这为我修好了。

于 2010-12-28T19:20:07.527 回答
1

我在 eclipse 3.6 SR1 中也看到过这个错误,结果证明它是由数百个编辑器选项卡保持打开状态引起的。关闭选项卡修复了错误。

于 2011-04-24T09:49:48.860 回答
0

尝试以下步骤:

  • 转到 eclipse 主目录(安装 eclipse 的位置),然后转到 plugins 文件夹
  • 删除所有最近安装的以 com.google 开头的插件。*
  • 尝试再次重新启动您的 Eclipse,它可能会再次开始工作(对我有用。)
  • 尝试从谷歌安装旧插件,或者只安装一次你需要的。(我要试试这个。)
于 2014-06-14T12:14:24.090 回答
0

在我的 Windows7 x64 系统上,我可以在 TeamViewer 8 运行时重现它(www.teamviewer.com)。当我停止 TeamViewer 时,错误消失了。

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

希望有帮助。

于 2014-12-09T05:42:34.523 回答
0

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

就我而言,我通过 Citrix XenApp 运行带有 SP1 和 Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) 的 Win7。当我在Package ExplorerJava Editor之间切换时会发生此错误。

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

希望这可以帮助其他人。

于 2016-12-07T07:20:43.177 回答