如何在java执行的任何一点获取主类名。所有我想要的是我需要从我的执行开始的地方获取类名。例如,
package mypackage;
class A
{
public static sayName()
{
System.out.println("Here i have to print the class name B");
}
}
package test;
import mypackage.A;
class B
{
public static void main()
{
A.sayName();
}
}
提前致谢
答案 0 :(得分:3)
看看是否有效。
StackTraceElement[] stack = Thread.currentThread ().getStackTrace ();
StackTraceElement main = stack[stack.length - 1];
String mainClass = main.getClassName ();
但我不确定如果执行此代码还有另一个主线程以外的控制线程,它是否会起作用。
答案 1 :(得分:0)
试试这个
public static String getMainClassName()
{
for(final Map.Entry<String, String> entry : System.getenv().entrySet())
{
if(entry.getKey().startsWith("JAVA_MAIN_CLASS"))
return entry.getValue();
}
throw new IllegalStateException("Cannot determine main class.")
}
这可能有效,但它不能在JVM之间移植。
答案 2 :(得分:0)
我将创建另外的持有者类,它将保存主类名。这样的事情:
public class MainClassHolder{
private static String className = null;
public static void setClassName(String name) {
className = name;
}
public static String getClassName() {
return className;
}
}
然后在主methot中你将className设置为holder
package mypackage;
class A
{
public static sayName()
{
System.out.println(MainClassHolder.getClassName());
}
}
package test;
import mypackage.A;
class B
{
public static void main()
{
MainClassHolder.setClassName(B.class.getName());
A.sayName();
}
}