SWT No More Handles

别来无恙 提交于 2019-11-27 06:34:27
Paul Lammertsma

If I understand you correctly, you are probably getting the following exception:

org.eclipse.swt.SWTError: No more handles

You may be creating resources (such as Font, Image or GC objects) that you aren't correctly disposing. You might want to take a moment to read through the SWT guide on Managing Operating System Resources.

To determine if this is indeed the case, I can recommend this useful article: Diagnosing Handle Leaks in SWT/RCP Windows Applications, which explains what resources are and suggests using Process Explorer or DPus to locate leaks.

A colleague also highly recommends Sleak, a SWT-focused application that can actually inform you which resources are remaining in residual memory.

For a very technical understanding of what handles SWT is making, this Sybase article describes that there are three kinds: User Object, GDI Object or Kernel Object handles, each of which has its own maximum.

You have some sort of resource leak in your program most likely. Use the following utility (http://www.eclipse.org/articles/swt-design-2/sleak.htm) as an easy way to find swt resource leaks. I used it to clean up a whole slew of problems in an rcp app I was working on

The limit isn't 10000 handles. Applications can use far more than 10000 handles (if RAM allows). The limit is on GDI and User resources (graphical elements).

What kind of resources are the SWT applications using (you can see this with taskmgr)? That would help to understand what is leaking.

For the record, if this were my question I would have accepted @Paul's answer. However, there is one sneaky issue that I'd like to add here to potentially help someone else if they come across this problem...

Check your usage of fonts.

In my case, my handles were not all that high, but instead I was new'ing up font instances and handing them to the StyledText style. I had to instead declare the fonts I wanted to use once, class level. This fixed it for me.

I've seen this error too in eclipse 3.6 SR1, it turned out to be caused by hundreds of editor tabs being left open. Closing the tabs fixed the error.

Try following steps:

  • go to eclipse home directory (where you installed eclipse), then go to plugins folder
  • remove all the recently install plugins starting with com.google.*
  • try restarting your eclipse again, it may start working again (worked for me.)
  • try to install old plugins from google or just once that you need. (I am going to try this.)

On my system Windows7 x64 I can reproduce it when TeamViewer 8 is running (www.teamviewer.com). When I stop TeamViewer, the bug disappears.

you may look into : https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983

Hope that helps.

I've also met this problem, but now i've solved it.

In my case, i'm running Win7 with SP1 and Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) through Citrix XenApp. This error happens when i switch between Package Explorer and Java Editor.

My solution:
run services.msc in Win7, find "Tablet PC Input Service", stop it.

Hope this may help others.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!