バックグラウンド
Java コードを UML クラス図に変換するツールを作成しています。3 週間しかないので、このタスクを実行するためにパーサーを作成するのではなく、Java Debug Interface を使用するように先生に勧められました。
問題
クラスが VM によってロードされるタイミングを示す ClassPrepareEvents に登録しましたが (以下のコード スニペットを参照)、クラスは必要なときにのみロードされます。たとえば、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.");
}
}
}