4

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

提前致谢

4

3 回答 3

3

看看这是否有效。

StackTraceElement[] stack = Thread.currentThread ().getStackTrace ();
StackTraceElement main = stack[stack.length - 1];
String mainClass = main.getClassName ();

但是我不确定如果此代码的执行具有除主线程之外的另一个控制线程,它是否会起作用。

于 2012-12-26T04:45:37.167 回答
0

我将创建额外的持有人类,它将持有主类名称。像这样的东西:

public class MainClassHolder{
    private static String className = null;

    public static void setClassName(String name) {
         className = name;
    }
    public static String getClassName() {
         return className;
    }
} 

然后在主要方法中,您将 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();
}
}
于 2012-12-26T05:36:52.620 回答
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 之间移植。

于 2012-12-26T04:49:39.473 回答