当前位置: 首页 > 面试题库 >

了解/调试我继承的大型Java Swing应用程序

苏富
2023-03-14
问题内容

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

它包含数十个类,这些类经常打破2000行,甚至达到10000行。文档不存在,并且无法阅读所有源代码以全面了解文档。

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

到目前为止,我已经设法将源代码导入Eclipse项目,并使用SwingExplorer插件来标识一些GUI组件。

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

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

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

我知道这个问题似乎太笼统了,但是我真的很头绪,正在寻找起点。

在此先感谢您抽出宝贵的时间阅读;)问候,Marco


问题答案:

在NetBeans中,我用于File > New Project > Java Project with Existing Sources允许轻松导航。大多数IDE具有类似的功能。

  • 使用Run > Generate Javadoc; 即使没有意见,OverviewIndexUseTree链接可能是有用的。

  • 调试器中设置断点,并用于Window > Debugging > Call Stack回答诸如“我是如何到达这里的。

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



 类似资料:
  • 问题内容: 我是JavaScript OOP的新手。您能否解释以下代码块之间的区别?我测试了两个模块。什么是最佳做法,为什么? 第一块: 第二块: 为什么笔者添加和使用方法,并没有宣布他们的内部方法类和在类? 为什么需要重新设置为?是当覆盖的属性设置?我注释了这一行,没有任何改变。 为什么叫在构造函数?当我这样做时,不会被“继承”的属性和方法 问题答案: 这两个块的不同之处在于,在第一个示例中该实

  • 问题内容: 我正在用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。 问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。 这是我的一些课程: 问题是它仍然从Operation类获取令牌:“ null” 我知道这可能是因为op

  • 本文向大家介绍JavaScript的原型继承详解,包括了JavaScript的原型继承详解的使用技巧和注意事项,需要的朋友参考一下 JavaScript是一门面向对象的语言。在JavaScript中有一句很经典的话,万物皆对象。既然是面向对象的,那就有面向对象的三大特征:封装、继承、多态。这里讲的是JavaScript的继承,其他两个容后再讲。 JavaScript的继承和C++的继承不大一样,C

  • 在编程中,我们经常会想获取并扩展一些东西。 例如,我们有一个 user 对象及其属性和方法,并希望将 admin 和 guest 作为基于 user 稍加修改的变体。我们想重用 user 中的内容,而不是复制/重新实现它的方法,而只是在其之上构建一个新的对象。 原型继承(Prototypal inheritance) 这个语言特性能够帮助我们实现这一需求。 [[Prototype]] 在 Java

  • 在传统的基于Class的语言如Java、C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass。 由于这类语言严格区分类和实例,继承实际上是类型的扩展。但是,JavaScript由于采用原型继承,我们无法直接扩展一个Class,因为根本不存在Class这种类型。 但是办法还是有的。我们先回顾Student构造函数: function Student(props) { t

  • 问题内容: 默认JVM参数对于运行大型应用程序不是最佳的。在实际应用中进行过调整的人员的任何见解都将有所帮助。我们正在32位Windows计算机上运行该应用程序,默认情况下使用该客户端JVM 。我们添加了-server并将NewRatio更改为1:3(更大的年轻一代)。 您是否尝试过其他有用的其他参数/​​调整? [更新]我正在谈论的应用程序的特定类型是很少关闭的服务器应用程序,至少需要-Xmx1