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