背景
我正在创建一个将 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.");
}
}
}