0

背景

我正在创建一个将 Java 代码转换为 UML 类图的工具。由于我只有 3 周的时间来完成这项任务,我的老师建议我使用 Java 调试接口而不是创建解析器来完成这项任务。

问题

我已经注册了 ClassPrepareEvents,它显示了 VM 何时加载类(参见下面的代码片段),但是类仅在需要时加载。例如,如果在 GUI 中单击一个按钮会创建一个类型为 A 的对象,那么在用户单击该按钮之前不会加载 A。

这需要一个自动化工具,因此需要在没有用户交互的情况下加载程序中的所有类,那么如何手动加载所有这些类呢?还是我错过了 API 中的某些内容,并且还有另一种方法可以做到这一点?

提前致谢!:)

代码片段

EventRequestManager em=vm.eventRequestManager();
ClassPrepareRequest cpR = em.createClassPrepareRequest();
cpR.addClassFilter("project.*");
cpR.enable();

EventQueue eventQ=vm.eventQueue();
while (true) {
    EventSet eventSet=null;
    try {
        eventSet=eventQ.remove();
    } catch (Exception e) { // handle the error 
          continue;
    }

    EventIterator eventIterator=eventSet.eventIterator();
    while (eventIterator.hasNext()) {
        Event event=eventIterator.nextEvent();

        if(event instanceof ClassPrepareEvent) {
            ClassPrepareEvent classPrepareEvent = (ClassPrepareEvent)event;
            ReferenceType refType = classPrepareEvent.referenceType();
            System.out.println(refType.name() + " loaded.");
        }
    }
}
4

1 回答 1

0

我知道它晚了3个月。

给出要加载的类的包目的地。您将需要访问您尝试转换的 javacode 的类路径。

请参阅这篇文章以查找包中的类。 您可以使用反射找到包中的所有类吗?

然后只需使用 Class.forName 将类加载到类加载器中即可

如果您仍然需要课堂准备活动。这也应该被触发。

于 2015-06-18T12:02:49.260 回答