0

バックグラウンド

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.");
        }
    }
}
4

1 に答える 1

0

3か月遅れていることは承知しています。

ロードするクラスのパッケージ宛先を指定します。変換しようとしている Javacode のクラスパスにアクセスする必要があります。

パッケージ内のクラスを見つけるには、この投稿を参照してください。 リフレクションを使用して、パッケージ内のすべてのクラスを見つけることができますか?

次に、 Class.forName を使用してクラスをクラスローダーにロードするだけです

それでもクラス準備イベントが必要な場合。それもトリガーされるはずです。

于 2015-06-18T12:02:49.260 に答える