jod*_*ell 45
试试这个:
StackTraceElement[] stack = Thread.currentThread ().getStackTrace ();
StackTraceElement main = stack[stack.length - 1];
String mainClass = main.getClassName ();
Run Code Online (Sandbox Code Playgroud)
当然,这只适用于从主线程运行的情况.不幸的是,我不认为有一个系统属性可以查询找出来.
编辑:拉入@John Meagher的评论,这是一个好主意:
要扩展@jodonnell,您还可以使用Thread.getAllStackTraces()获取系统中的所有堆栈跟踪.从这里你可以搜索"主"线程的所有堆栈跟踪,以确定主类是什么.即使您的类没有在主线程中运行,这也可以工作.
Joh*_*her 15
要扩展@jodonnell,您还可以使用Thread.getAllStackTraces()获取系统中的所有堆栈跟踪.从这里你可以搜索main线程的所有堆栈跟踪来确定主类是什么.即使您的类没有在主线程中运行,这也可以工作.
这是我在使用jodonnell和John Meagher的综合响应时提出的代码.它将主类存储在静态变量中,以减少重复调用的开销:
private static Class<?> mainClass;
public static Class<?> getMainClass() {
if (mainClass != null)
return mainClass;
Collection<StackTraceElement[]> stacks = Thread.getAllStackTraces().values();
for (StackTraceElement[] currStack : stacks) {
if (currStack.length==0)
continue;
StackTraceElement lastElem = currStack[currStack.length - 1];
if (lastElem.getMethodName().equals("main")) {
try {
String mainClassName = lastElem.getClassName();
mainClass = Class.forName(mainClassName);
return mainClass;
} catch (ClassNotFoundException e) {
// bad class name in line containing main?!
// shouldn't happen
e.printStackTrace();
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25544 次 |
| 最近记录: |