Если вы не используете загрузчиков динамического класса, вы можете искать путь к классам и для каждого поиска в каталоге или в файле JAR.
Попробуйте это:
StackTraceElement[] stack = Thread.currentThread ().getStackTrace ();
StackTraceElement main = stack[stack.length - 1];
String mainClass = main.getClassName ();
, Конечно, это только работает, если Вы работаете от основного потока. К сожалению, я не думаю, что существует системное свойство, которое можно запросить для обнаружения этого.
Редактирование: Получение по запросу в комментарии @John Meagher, который является прекрасной идеей:
, Чтобы подробно остановиться на @jodonnell можно также получить все отслеживания стека в системе с помощью Thread.getAllStackTraces (). От этого можно искать все отслеживания стека "основной" Поток для определения, каков основной класс. Это будет работать, даже если Ваш класс не будет работать в основном потоке.
Или вы можете просто использовать getClass (). Вы можете сделать что-то вроде:
public class Foo
{
public static final String PROGNAME = new Foo().getClass().getName();
}
И тогда PROGNAME будет доступно где угодно внутри Foo. Если вы не находитесь в статическом контексте, вам будет проще использовать это:
String myProgramName = this.getClass().getName();
Также из командной строки Вы могли работать инструмент jps . Походит
jps -l
, получит Вас, что Вы хотите.
Чтобы подробно остановиться на @jodonnell, можно также получить все отслеживания стека в системе с помощью Thread.getAllStackTraces () . От этого можно искать все отслеживания стека эти main
Поток для определения, каков основной класс. Это будет работать, даже если Ваш класс не будет работать в основном потоке.