Eri*_* R. 18 java program-entry-point runtime stack-trace classloader
我想在运行时确定我的应用程序启动的类名,带有main()方法的类名,但我在另一个线程中,我的堆栈跟踪不会一直回到原始类.
我搜索了系统属性以及ClassLoader提供的所有内容,并且没有提供任何内容.这些信息不可用吗?
谢谢.
JAVA_MAIN_CLASS 环境值并不总是存在,具体取决于平台。如果您只想获取启动 Java 进程的“主”类的名称,您可以这样做:
public static String getMainClassName()
{
StackTraceElement trace[] = Thread.currentThread().getStackTrace();
if (trace.length > 0) {
return trace[trace.length - 1].getClassName();
}
return "Unknown";
}
Run Code Online (Sandbox Code Playgroud)
请参阅Tom Hawtin给出的评论链接.这些天的解决方案是(仅限Oracle JVM):
public static String getMainClassAndArgs() {
return System.getProperty("sun.java.command"); // like "org.x.y.Main arg1 arg2"
}
Run Code Online (Sandbox Code Playgroud)
仅使用Oracle Java 7进行测试.有关特殊情况的更多信息:http://bugs.java.com/view_bug.do?video_id = 4827318
我想到了。谁能告诉我这个环境变量是否始终存在于跨操作系统的其他 java 实现中?这在 Oracle JVM 上会生成一个类似“org.xyClassName”的字符串
public static String getMainClassName() {
for (final Map.Entry<String, String> entry : System.getenv().entrySet())
if (entry.getKey().startsWith("JAVA_MAIN_CLASS")) // like JAVA_MAIN_CLASS_13328
return entry.getValue();
throw new IllegalStateException("Cannot determine main class.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13101 次 |
| 最近记录: |