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

时间:2015-08-17 21:36:12

标签: java

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

Find where java class is loaded from

有一个转折点。与示例不同,我不知道在编译时哪个类将包含main方法。但是,如果我知道哪个类首先被调用,那么我就可以找到我的应用程序的执行位置。

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

编辑(澄清):

我希望有一个图书馆来了解" name"我正在运行的应用程序。因此,如果我输入java -cp ... MyMainClass并且我的主类碰巧住在文件夹/usr/something/myApp/lib/MyMainClass.jar中,那么我可以报告" myApp"。这将是一个后备默认选项,用于推断我的程序名称。

2 个答案:

答案 0 :(得分:3)

如果你在该程序的主线程中,你可以这样做:

{{1}}

正如@Makoto所说,它可能有助于解释你为什么需要这样做;可能有更好的方法,取决于你如何启动应用程序。

答案 1 :(得分:1)

要获取入口点,而不是依赖于线程,您可以检索所有堆栈跟踪并选择具有id == 1的顶点,例如(Java 8):

StackTraceElement[] stackTrace = Thread.getAllStackTraces()
        .entrySet()
        .stream()
        .filter(entry -> entry.getKey().getId() == 1)
        .findFirst().get()
        .getValue();
System.out.println(stackTrace[stackTrace.length - 1]);