2011-10-31 15 views
3

如果這甚至是可能的,我不會起訴,但我有一個Swing應用程序,其中有四個不同的標籤,我必須跟蹤應用程序中的錯誤我最初沒有寫過,沒有在源代碼中靜態定義的變量,而且我無法準確跟蹤源代碼中變量名稱對應的標籤。在運行時發現Swing組件變量名稱

是否有任何種類的插件或應用程序可以在應用程序運行時告訴您有關Swing GUI對象的信息,包括變量名稱(如果有的話),它被引用?

回答

1

您無法直接獲取對象的變量名稱。

如果你使用Eclipse,你可以創建在JLabel的構造函數確實有點像conditional breakpoint

this.putClientProperty("creation stack trace", new Exception()); 

這將讓你看到每一個JLabel的堆棧跟蹤(和創建行數)創建。

1

如果我是你,我會做這樣的:從Java JDK

  • 開放src.zip並提取JLabel.java。把它放在你的項目中。
  • 修改類:
    • 添加一個字段與Throwable類型,並在每一個構造函數的最後寫上new Throwable()它。
    • 在每個構造函數的末尾添加新組件的鼠標點擊偵聽器。處理程序不需要執行任何操作,只需要在其中放置斷點即可。

現在,當你運行你的應用程序修改後的JLabel將優先於JDK標準之一。當你想在創建一些標籤的代碼中找到一個點時,在添加的事件處理程序中設置斷點,單擊該標籤,當調試器暫停時,在添加的Throwable字段中檢查堆棧。

記得在調試完成後刪除自定義的JLabel,並且不會將其發佈到生產代碼中,因爲在每個JLabel中創建Throwable()會產生負面的性能影響。

+0

+1如果您無法訪問應用程序的源代碼,這是一個很好的解決方案。但我認爲他可以,所以我寧願使用我的文章中提到的GUI調試器。 – Stephan

1

如果您只想調試並查看哪個對象屬於GUI中的哪個組件,我會推薦使用Swing Explorer進行調試。

您還可以擴展JLabel,爲其添加調試功能,並用新的「調試」標籤替換代碼中的所有JLabel。

相關問題