Windows XP est limité à 10 000 par utilisateur pour chaque processus et à 32 000 par session de bureau. Toutefois, lorsque j'exécute 4 ou 5 processus SWT, chacun ne consommant pas plus de 2 000 poignées utilisateur, l'exception SWT No More sera toujours renvoyée.
Quelqu'un sait-il pourquoi?
Si je vous ai bien compris, vous obtenez probablement l'exception suivante:
org.Eclipse.swt.SWTError: No more handles
Vous créez peut-être des ressources (telles que des objets Font
, Image
ou GC
) que vous ne supprimez pas correctement. Vous voudrez peut-être prendre un moment pour lire le guide SWT sur Gestion des ressources du système d'exploitation .
Pour déterminer s'il en est bien ainsi, je peux recommander cet article utile: Diagnostic des fuites de descripteurs dans les applications SWT/RCP , qui explique les ressources et suggère d'utiliser Process Explorer ou DPus localiser les fuites.
Un collègue recommande également fortement Sleak , une application centrée sur SWT qui peut réellement vous informer des ressources restantes dans la mémoire résiduelle.
Pour une compréhension très technique de la gestion de SWT, cet article Sybase décrit il en existe trois types: objet utilisateur, objet GDI ou objet noyau, chacun ayant son propre maximum.
Vous avez probablement une sorte de fuite des ressources dans votre programme. Utilisez l’utilitaire suivant ( http://www.Eclipse.org/articles/swt-design-2/sleak.htm ) pour localiser facilement les fuites de ressources swt. Je l'ai utilisé pour nettoyer toute une série de problèmes dans une application RCP sur laquelle je travaillais
La limite n'est pas 10000 poignées. Les applications peuvent utiliser plus de 10 000 descripteurs (si RAM le permet). La limite concerne GDI et les ressources utilisateur (éléments graphiques).
Quel type de ressources les applications SWT utilisent-elles (vous pouvez le voir avec taskmgr)? Cela aiderait à comprendre ce qui fuit.
J'ai également constaté cette erreur dans Eclipse 3.6 SR1. Des centaines d'onglets d'éditeur sont restés ouverts. La fermeture des onglets a corrigé l'erreur.
Pour mémoire, si telle était ma question, j'aurais accepté la réponse de @ Paul. Cependant, il y a un problème sournois que j'aimerais ajouter ici pour aider potentiellement quelqu'un d'autre s'il rencontre ce problème ...
Vérifiez votre utilisation des polices.
Dans mon cas, mes poignées n'étaient pas très hautes, mais je créais plutôt des instances de polices et les transmettais au style StyledText. Je devais plutôt déclarer les polices que je voulais utiliser une fois, au niveau de la classe. Cela a résolu le problème pour moi.
J'ai également rencontré ce problème, mais maintenant je l'ai résolu.
Dans mon cas, j'exécute Win7 avec SP1 et Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) via Citrix XenApp. Cette erreur se produit lorsque je bascule entre Explorateur de packages et Java Editor .
Ma solution:
exécutez services.msc dans Win7, recherchez «Service d’entrée pour Tablet PC», arrêtez-le.
J'espère que cela pourra aider les autres.
Essayez les étapes suivantes:
Sur mon système Windows 7 x64, je peux le reproduire lorsque TeamViewer 8 est en cours d'exécution (www.teamviewer.com). Lorsque j'arrête TeamViewer, le bogue disparaît.
vous pouvez regarder dans: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=402983
J'espère que cela pourra aider.