Java 如何确定哪个类作为主类执行?

Java 如何确定哪个类作为主类执行?,java,Java,最终,我想要的是类似于这个问题的答案: 有一个转折点。与示例不同,我不知道编译时哪个类将包含main方法。但如果我知道先调用哪个类,我就可以找到从哪里执行应用程序 所以我的问题是:如何发现哪个类包含被调用以执行java应用程序的主方法 编辑(澄清): 我想有一个库来知道我正在运行的应用程序的“名称”。所以如果我输入java-cp。。。MyMainClass和我的main类恰好位于/usr/something/myApp/lib/MyMainClass.jar文件夹中,然后我可以报告“myApp

最终,我想要的是类似于这个问题的答案:

有一个转折点。与示例不同,我不知道编译时哪个类将包含main方法。但如果我知道先调用哪个类,我就可以找到从哪里执行应用程序

所以我的问题是:如何发现哪个类包含被调用以执行java应用程序的主方法

编辑(澄清):


我想有一个库来知道我正在运行的应用程序的“名称”。所以如果我输入java-cp。。。MyMainClass和我的main类恰好位于/usr/something/myApp/lib/MyMainClass.jar文件夹中,然后我可以报告“myApp”。这将是推断我的程序名称的备用默认选项。

如果您在程序的主线程中,可以执行以下操作:

StackTraceElement[] stackTrace = new Exception().getStackTrace();
String className = stackTrace[stackTrace.length - 1].getClassName();

正如@Makoto所说,解释一下为什么需要这样做可能会很有用;可能有更好的方法,具体取决于您启动应用程序的方式。

如果您处于程序的主线程中,则可以执行以下操作:

StackTraceElement[] stackTrace = new Exception().getStackTrace();
String className = stackTrace[stackTrace.length - 1].getClassName();

正如@Makoto所说,解释一下为什么需要这样做可能会很有用;可能有更好的方法,这取决于您启动应用程序的方式。

要获取入口点,而不是取决于线程,您可以检索所有StackTrace并选择id==1的顶部点,例如(Java 8):


要获取入口点,不依赖于线程,您可以检索所有stacktrace,并选择id==1的顶部点,例如(Java 8):


这就像执行Java应用程序必须知道的事情之一。除非你使用的是像SpringBoot这样的东西,它为你提供了一个定义入口点的常规位置,否则我不确定你在这里得到了什么。有些东西必须知道入口点,即使可以预知,但它是具体的。如何启动应用程序,即在shell中单击或键入什么?顺便说一句,它与你提到的问题无关。它是单线程的吗?如果是这样的话,创建一个新的异常并查看stacktrace中最底层的类。除非你使用的是像SpringBoot这样的东西,它为你提供了一个定义入口点的常规位置,否则我不确定你在这里得到了什么。有些东西必须知道入口点,即使可以预知,但它是具体的。如何启动应用程序,即在shell中单击或键入什么?顺便说一句,它与你提到的问题无关。它是单线程的吗?如果是这样,创建一个新的异常并查看stacktrace中最底层的类。