2010-01-07 22 views
25

Windows XP tiene el límite de 10000 identificadores de usuario para cada proceso y un total de 32000 para cada sesión de escritorio. Sin embargo, cuando ejecuto 4 o 5 procesos SWT, cada uno de los cuales consume no más de 2000 identificadores de usuario, siempre se lanzará la excepción SWT No More Handles.SWT No More Handles

¿Alguien sabe por qué?

Respuesta

42

Si he entendido bien, es probable que esté recibiendo la siguiente excepción:

org.eclipse.swt.SWTError: No more handles 

Pueden crear recursos (tales como Font, Image o GC objetos) que no están disponiendo correctamente. Es posible que desee tomar un momento para leer la guía SWT en Managing Operating System Resources.

para determinar si este es el caso, puedo recomendar este artículo útil: Diagnosing Handle Leaks in SWT/RCP Windows Applications, lo que explica qué recursos son y sugiere el uso de Process Explorer o DPus para localizar fugas.

Un colega también recomienda encarecidamente Sleak, una aplicación centrada en SWT que realmente puede informarle qué recursos quedan en la memoria residual.

Para obtener una comprensión muy técnica de qué maneja SWT, this Sybase article describes hay tres tipos: Objeto de usuario, Objeto GDI o Objetos de kernel, cada uno de los cuales tiene su propio máximo.

2

El límite no es 10000 identificadores. Las aplicaciones pueden usar más de 10000 controladores (si RAM lo permite). El límite está en GDI y recursos de usuario (elementos gráficos).

¿Qué tipo de recursos están utilizando las aplicaciones SWT (puede ver esto con taskmgr)? Eso ayudaría a entender lo que está goteando.

7

Es probable que haya algún tipo de pérdida de recursos en su programa. Use la siguiente utilidad (http://www.eclipse.org/articles/swt-design-2/sleak.htm) como una forma fácil de encontrar fugas de recursos swt. Lo utilicé para limpiar una gran cantidad de problemas en una aplicación de rcp. Estaba trabajando en

1

Para el registro, si esta fuera mi pregunta, hubiera aceptado la respuesta de @ Paul. Sin embargo, hay un problema furtivo que me gustaría agregar aquí para ayudar potencialmente a otra persona si se encuentran con este problema ...

Verifique el uso de las fuentes.

En mi caso, mis identificadores no eran tan altos, pero en su lugar estaba actualizando instancias de fuentes y entregándolas al estilo StyledText. Tuve que declarar las fuentes que quería usar una vez, a nivel de clase. Esto me lo arregló.

1

He visto este error también en eclipse 3.6 SR1, que resultó ser causado por cientos de pestañas del editor que se dejan abiertas. Al cerrar las pestañas se corrigió el error.

0

intentar los siguientes pasos:

  • van a eclipsar directorio principal (donde se ha instalado Eclipse), y luego ir a la carpeta plugins
  • eliminar todos los plugins recientemente instalar a partir de com.google *
  • . intente reiniciar su eclipse nuevamente, puede comenzar a funcionar nuevamente (funcionó para mí).)
  • intente instalar plugins anteriores de google o solo una vez que lo necesite. (Voy a probar esto.)
0

También he encontrado este problema, pero ahora lo he resuelto.

En mi caso, estoy ejecutando Win7 con SP1 y Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) a través de Citrix XenApp. Este error ocurre cuando cambio entre Package Explorer y Java Editor.

Mi solución:
ejecute services.msc en Win7, busque "Servicio de entrada de Tablet PC", deténgalo.

Espero que esto ayude a los demás.