如何在线程java应用程序中的运行时确定主类?

我想在运行时确定我的应用程序开始的类名,即使用main()方法的类名,但我在另一个线程中,我的stacktrace不会一直回到原始类。

我已经搜索了系统属性和ClassLoader必须提供的所有内容,但什么也没找到。此信息是否不可用?

谢谢。


答案 1

请参阅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


答案 2

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";
  } 

推荐