有没有办法找到在Java中运行的程序的名称?主要方法的类就足够了.
试试这个:
StackTraceElement[] stack = Thread.currentThread ().getStackTrace (); StackTraceElement main = stack[stack.length - 1]; String mainClass = main.getClassName ();
当然,这只适用于从主线程运行的情况.不幸的是,我不认为有一个系统属性可以查询找出来.
编辑:拉入@John Meagher的评论,这是一个好主意:
要扩展@jodonnell,您还可以使用Thread.getAllStackTraces()获取系统中的所有堆栈跟踪.从这里你可以搜索"主"线程的所有堆栈跟踪,以确定主类是什么.即使您的类没有在主线程中运行,这也可以工作.
System.getProperty("sun.java.command")
要扩展@jodonnell,您还可以使用Thread.getAllStackTraces()获取系统中的所有堆栈跟踪.从这里你可以搜索main
线程的所有堆栈跟踪来确定主类是什么.即使您的类没有在主线程中运行,这也可以工作.
这是我在使用jodonnell和John Meagher的综合响应时提出的代码.它将主类存储在静态变量中,以减少重复调用的开销:
private static Class> mainClass; public static Class> getMainClass() { if (mainClass != null) return mainClass; Collectionstacks = 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; }