Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时发现Swing组件变量名_Java_Swing - Fatal编程技术网

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

Java 在运行时发现Swing组件变量名,java,swing,Java,Swing,如果这是可能的话,我不起诉,但我有一个Swing应用程序,它有大约四打不同的标签,我必须跟踪其中的错误,一个我最初没有编写的应用程序,源代码中没有静态定义的变量,我很难精确地追踪源代码中变量名对应的标签 是否有任何种类的插件或应用程序可以在应用程序运行时告诉您有关Swing GUI对象的信息,包括变量名(如果有),它被引用?您无法直接获取对象的变量名 如果您使用的是eclipse,那么可以在JLabel构造函数中创建 this.putClientProperty("creation stack

如果这是可能的话,我不起诉,但我有一个Swing应用程序,它有大约四打不同的标签,我必须跟踪其中的错误,一个我最初没有编写的应用程序,源代码中没有静态定义的变量,我很难精确地追踪源代码中变量名对应的标签


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

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

如果您使用的是eclipse,那么可以在JLabel构造函数中创建

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

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

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

  • 从java jdk打开src.zip并提取JLabel.java。把它放在你的项目中
  • 修改该类:
    • 添加一个Throwable类型的字段,并在每个构造函数的末尾编写一个
      newthrowable()
    • 在每个构造函数的末尾,向组件添加新的鼠标单击侦听器。处理程序不必做任何事情,只是为了让您可以在其中放置断点
现在,当您运行应用程序时,修改后的JLabel将优先于标准JDK one。当您想在代码中找到某个创建标签的点时,在添加的事件处理程序中设置断点,单击该标签,当调试器暂停时,在添加的可丢弃字段中检查堆栈


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

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


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

+1如果您无法访问应用程序的源代码,这是一个很好的解决方案。但我认为他可以,所以我更喜欢使用我在帖子中提到的GUI调试器。