Windows XPには、プロセスごとに10000ユーザーハンドル、デスクトップセッションごとに合計32000の制限があります。ただし、4または5つのSWTプロセスを実行すると、それぞれが2000ユーザーハンドルしか消費しないため、SWTこれ以上例外処理は常にスローされます。
なぜ誰か知っていますか?
私があなたを正しく理解している場合、おそらく次の例外が発生しています。
org.Eclipse.swt.SWTError: No more handles
正しく処理していないリソース(Font
、Image
、GC
オブジェクトなど)を作成している可能性があります。 オペレーティングシステムリソースの管理 に関するSWTガイドを一読することをお勧めします。
これが本当に当てはまるかどうかを判断するには、次の役立つ記事をお勧めします: SWT/RCP Windowsアプリケーションでのハンドルリークの診断 。これは、リソースの説明と Process Explorer の使用を提案しています。または DPus リークを特定します。
同僚は Sleak を強くお勧めします。これは、どのリソースが残りのメモリに残っているかを実際に通知できるSWT重視のアプリケーションです。
SWTがどのように処理するかを非常に技術的に理解するために、 このSybaseの記事で説明 には、ユーザーオブジェクト、GDIオブジェクトまたはカーネルオブジェクトハンドル、それぞれの種類があります。独自の最大値があります。
プログラムで何らかのリソースリークが発生している可能性があります。 swtリソースリークを見つける簡単な方法として、次のユーティリティ( http://www.Eclipse.org/articles/swt-design-2/sleak.htm )を使用します。私はそれを使って、私が取り組んでいたrcpアプリの多くの問題をクリーンアップしました
制限は10000ハンドルではありません。アプリケーションは10000をはるかに超えるハンドルを使用できます(RAMが許可する場合)。制限はGDIおよびユーザーリソース(グラフィック要素))です。
SWTアプリケーションはどのようなリソースを使用していますか(taskmgrで確認できます)?これは、何が漏れているのかを理解するのに役立ちます。
このエラーはEclipse 3.6 SR1でも見ましたが、何百ものエディタータブが開いたままになっていることが原因であることがわかりました。タブを閉じるとエラーが修正されました。
ちなみに、これが私の質問だったら、@ Paulの回答を受け入れたでしょう。しかし、誰かがこの問題に遭遇した場合に誰かを助けるために、ここに追加したい卑劣な問題があります...
フォントの使用状況を確認してください。
私の場合、私のハンドルはそれほど高くはありませんでしたが、代わりにフォントインスタンスを新しくして、それらをStyledTextスタイルに渡していました。代わりに、一度使用したいフォントをクラスレベルで宣言する必要がありました。これで解決しました。
私もこの問題に遭遇しましたが、今では解決しました。
私の場合、私はCitrix XenAppを介してWin7 SP1およびSpring Tool Suite 3.7.2(Eclipse Mars 4.5.1)を実行しています。このエラーはPackage ExplorerとJava Editorを切り替えると発生します。
私の解決策:
Win7でservices.mscを実行し、「タブレットPC入力サービス」を見つけて停止します。
これが他の人に役立つことを願っています。
次の手順を試してください。
私のシステムWindows7 x64では、TeamViewer 8が実行されているときにそれを再現できます(www.teamviewer.com)。 TeamViewerを停止すると、バグが消えます。
あなたは調べてもよい: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=40298
お役に立てば幸いです。