在运行时发现Swing组件变量名称

时间:2011-10-31 15:50:31

标签: java swing

如果这是可能的话,我不会起诉,但我有一个Swing应用程序,它有大约四十个不同的标签,我必须追踪错误,一个我最初没有写的应用程序,在源代码中没有静态定义的变量,我无法准确地跟踪源代码中与变量名称对应的标签。

是否有任何类型的插件或应用程序可以在应用程序运行时告诉您有关Swing GUI对象的信息,包括变量名称(如果有),它被引用?

3 个答案:

答案 0 :(得分:1)

您无法直接获取对象的变量名称。

如果你正在使用eclipse,你可以在JLabel构造函数中创建一个conditional breakpoint来做类似的事情,

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

这将让您看到每个创建的JLabel的堆栈跟踪(和创建行号)。

答案 1 :(得分:1)

如果我是你,我会这样做:

  • 从java jdk打开src.zip并解压缩JLabel.java。把它放在你的项目中。
  • 修改该类:
    • 添加一个Throwable类型的字段,并在每个构造函数的末尾写一个new Throwable()
    • 在每个构造函数的末尾添加新的鼠标单击侦听器到组件。处理程序不必执行任何操作,只需将断点放在其中即可。

现在,当您运行应用程序时,您修改的JLabel将优先于标准JDK。如果要在代码中找到创建某个标签的点,请在添加的事件处理程序中设置断点,单击该标签,并在调试器暂停时检查添加的Throwable字段中的堆栈。

请记住在调试完成后删除自定义JLabel,而不是在生产代码中发送它,因为在每个JLabel中创建Throwable()会对性能产生负面影响。

答案 2 :(得分:1)

如果您只想调试并查看哪个对象属于GUI中的哪个组件,我建议使用Swing Explorer进行调试。

您还可以扩展JLabel,为其添加调试功能,并用新的“调试”标签替换代码中的所有JLabel。