Thread.getAllStackTraces()動作する可能性があります。- または、ThreadGroup 階層を一番上に移動して、ルートからすべてのスレッドを取得しますThreadGroup( getParent() == null)。
main()次に、メソッドのスタック トレースを調べて、そのパッケージ/クラス名を特定すると役立つ場合があります。
「スタンドアロン」モードの検出は簡単です。main()メソッドが他のコードの前に実行されると、スタンドアロンになります。
public class MyMainClass {
private static boolean standalone = false;
public static boolean isStandalone() {
return standalone;
}
public static void main(String[] args) {
standalone = true;
// Run as usual...
}
}
次に、任意のコードを呼び出しMyMainClass.isStandalone()て、それが単独で実行されているかどうかを確認できます。
スタンドアロン モードでない場合、どのアプリケーションがコードを実行しているかを判断することは、やや難しく、おそらくスタック トレースなしでは実行できない可能性があります。
Class.forName()アプリケーション B には存在するが C には存在しないクラス、およびその逆がわかっている場合は、 ;を介してそれらの 1 つを見つけることもできます。その呼び出しが で失敗したClassNotFoundException場合、問題のクラスが現在のランタイム環境で使用できないことがわかっているため、どのアプリケーションが実行されているかを推測できる可能性があります。
コードで評価できるように、アプリケーションごとにある種のアプリケーション グローバル プロパティを定義することをお勧めします。