最终我想要的是类似于这个问题的答案:
Find where java class is loaded from
有一个转折点。与示例不同,我不知道在编译时哪个类将包含main方法。但是,如果我知道哪个类首先被调用,那么我就可以找到我的应用程序的执行位置。
所以我的问题是:我如何发现哪个类包含调用以执行我的java应用程序的main方法?
编辑(澄清):我希望有一个图书馆来了解" name"我正在运行的应用程序。因此,如果我输入java -cp ... MyMainClass并且我的主类碰巧住在文件夹/usr/something/myApp/lib/MyMainClass.jar中,那么我可以报告" myApp"。这将是一个后备默认选项,用于推断我的程序名称。
答案 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]);