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 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 に答える
0

メイン クラス名を保持する追加のホルダー クラスを作成します。そんな感じ:

public class MainClassHolder{
    private static String className = null;

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

次に、メイン メソッドで、className をホルダーに設定します。

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 に答える