2010-01-07 66 views
25

Windows XP中有限制10000處理用戶爲每個桌面會話的每個進程和總32000。但是,當我運行4或5個SWT過程時,每個消耗的用戶句柄不超過2000個,SWT No More句柄總是會拋出。SWT不再有句柄

有誰知道爲什麼?

回答

42

如果我理解正確的話,你可能收到以下異常:

org.eclipse.swt.SWTError: No more handles 

您可以創建資源(如FontImageGC對象),你是不是正確處置。您可能需要花點時間閱讀關於Managing Operating System Resources的SWT指南。

要確定是否確實如此,我可以推薦這篇有用的文章:Diagnosing Handle Leaks in SWT/RCP Windows Applications,它解釋了什麼資源,並建議使用Process ExplorerDPus來定位泄漏。

一位同事也強烈建議Sleak,一個SWT爲重點的應用程序,實際上可以告訴你哪些資源剩餘的殘留記憶。

想了解SWT正在做什麼的技術知識,this Sybase article describes有三種:用戶對象,GDI對象或內核對象句柄,每個句柄都有自己的最大值。

2

該限制不是10000個句柄。應用程序可以使用遠遠超過10000個句柄(如果RAM允許)。限制在GDI和用戶資源(圖形元素)上。

是在SWT應用程序中使用什麼樣的資源

(你可以看到這與taskmgr)?這將有助於瞭解什麼是泄漏。

1

爲了記錄在案,如果這是我的問題,我會接受@保羅的回答。但是,有一個偷偷摸摸的問題,我想在這裏添加到可能幫助其他人,如果他們遇到此問題...

檢查您的字體的使用情況。

在我的情況下,我的手柄並不是那麼高,而是我正在新建字體實例並將它們交給StyledText樣式。我不得不宣佈我想要使用的字體一次,即課程級別。這爲我修好了。

1

我已經在Eclipse 3.6 SR1看到這個錯誤太多,就變成了由數百名編輯器選項卡中引起被懸空。關閉標籤修復了錯誤。

0

嘗試以下步驟:

  • 去日食(你安裝了Eclipse)的主目錄,然後去plugins文件夾
  • 刪除所有最近安裝插件開始com.google *
  • 。嘗試重新啓動你的Eclipse,它可能會重新開始工作(爲我工作。)
  • 試圖從谷歌安裝舊插件或只有一次,你所需要的。 (我會試試這個)
0

我也遇到了這個問題,但現在我已經解決了這個問題。

就我而言,我與SP1和Spring工具套件3.7.2(火星的Eclipse 4.5.1)通過Citrix XenApp的運行Win7的。當我Package Explorer中Java編輯器之間切換髮生這種錯誤。

我的解決辦法:在Win7
運行services.msc,找到 「Tablet PC輸入服務」,阻止它。

希望這可以幫助別人。