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()
以确定它是否独立运行。
确定哪个应用程序正在运行您的代码,当它不处于独立模式时,有点困难,并且可能无法在没有堆栈跟踪的情况下完成,这并不总是完全可靠的,而是某种启发式方法。
如果您知道应用程序 B 中存在哪些类但 C 中不存在,反之亦然,您也可以尝试通过Class.forName()
;找到其中一个类。如果该调用失败并且ClassNotFoundException
您知道当前运行时环境中没有相关类,并且可能能够推断出哪个应用程序正在运行。
为每个应用程序定义某种应用程序全局属性肯定是一个更好的主意,然后您的代码可以对其进行评估。