【问题标题】:Getting a clue at / debug a huge Java Swing App I've inherited获得/调试我继承的巨大 Java Swing 应用程序的线索
【发布时间】:2012-10-07 16:12:21
【问题描述】:

我的任务是在 Java/Swing 应用程序中实现新的最终用户功能。实施的任务相对容易和直接。麻烦的是现有的应用要修改。

它包含几十个类,这些类经常突破 2000 行,有时甚至达到 10000 行。 文档不存在,阅读所有源代码以了解它的大图是不可行的。

该应用程序本身基本上是一个用于绘制图表(例如流程图)的 GUI 工具,并且是开源的(如果有帮助,我可以发布指向源代码的链接)。

到目前为止,我已经成功地将源代码导入到一个 Eclipse 项目中,并使用 SwingExplorer 插件来识别一些 GUI 组件。

应用程序中最“有趣”的部分是绘制图表的画布。它被实现为一个继承自 JComponent 的类(大约 9700 行长)。 在 SwingExplorer 中无法选择显示图表的部分:整个画布仅被识别为上述类的单个实例。 因此,我猜想这个庞大的单一类负责处理图表的所有用户交互和 AWT 绘图操作,并仅返回某种图像缓冲区来显示(但这是一个巨大的猜测)。

我的修改涉及在绘制在画布上时对图表进行计算。因此它将是一个新的类,它将在创建图表的特定元素期间接收和处理广播的事件,然后对它们进行一些计算。

我的主要问题是:如何调试事件流?如何在绘制图表时遵循执行流程,查看生成、处理了哪些事件,并了解正在绘制的对象在内存中的位置?

我知道这个问题可能看起来太笼统了,但我真的一无所知,正在寻找一个起点。

提前感谢您花时间阅读;) 问候, 马可

【问题讨论】:

    标签: java swing debugging user-interface


    【解决方案1】:

    在 NetBeans 中,我使用 File > New Project > Java Project with Existing Sources 来实现轻松导航。大多数 IDE 都有类似的功能。

    • 使用Run > Generate Javadoc;即使没有 cmets,OverviewIndexUseTree 链接也可能有用。

    • 在调试器中设置断点并使用Window > Debugging > Call Stack 回答诸如“我是怎么到这里的。

    • 在集成Profile > Profile Project模式下运行代码,查看原理执行线程。

    【讨论】:

    • 谢谢,该项目的 javadoc 已经可用,但不是很有用。断点不是很有帮助,因为应用程序是 100% 事件驱动的,我真的不知道在哪里放置断点。我使用 VisualVM 来掌握堆,并设法学习了更多的东西。我可以看到表示图中节点的对象正在被创建,并且我可以查看它们的属性。但我仍然无法弄清楚是否有某种容器或结构存储了该节点(图表元素)的所有引用。
    • 诀窍是随时添加到 javadoc 并以新颖的方式使用它,例如-linksource。还要寻找模型/视图二分法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多