如何在线程java应用程序中的运行时确定主类?
2022-09-01 23:27:34
我想在运行时确定我的应用程序开始的类名,即使用main()方法的类名,但我在另一个线程中,我的stacktrace不会一直回到原始类。
我已经搜索了系统属性和ClassLoader必须提供的所有内容,但什么也没找到。此信息是否不可用?
谢谢。
我想在运行时确定我的应用程序开始的类名,即使用main()方法的类名,但我在另一个线程中,我的stacktrace不会一直回到原始类。
我已经搜索了系统属性和ClassLoader必须提供的所有内容,但什么也没找到。此信息是否不可用?
谢谢。
请参阅Tom Hawtin给出的链接评论。现在的解决方案是(仅限Oracle JVM):
public static String getMainClassAndArgs() {
return System.getProperty("sun.java.command"); // like "org.x.y.Main arg1 arg2"
}
仅使用 Oracle Java 7 进行测试。有关特殊情况的更多信息:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827318
JAVA_MAIN_CLASS环境值并不总是存在,具体取决于平台。如果您只想获取启动 Java 进程的“main”类的名称,则可以执行以下操作:
public static String getMainClassName()
{
StackTraceElement trace[] = Thread.currentThread().getStackTrace();
if (trace.length > 0) {
return trace[trace.length - 1].getClassName();
}
return "Unknown";
}