如何在java中获取主类名

时间:2012-12-26 04:38:35

标签: java stack-trace

如何在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();
}
}

提前致谢

3 个答案:

答案 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();
}
}