0$ (Название программы) в Java? Обнаружить основной класс?

Если вы не используете загрузчиков динамического класса, вы можете искать путь к классам и для каждого поиска в каталоге или в файле JAR.

54
задан jodonnell 19 September 2008 в 12:42
поделиться

4 ответа

Попробуйте это:

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

, Конечно, это только работает, если Вы работаете от основного потока. К сожалению, я не думаю, что существует системное свойство, которое можно запросить для обнаружения этого.

Редактирование: Получение по запросу в комментарии @John Meagher, который является прекрасной идеей:

, Чтобы подробно остановиться на @jodonnell можно также получить все отслеживания стека в системе с помощью Thread.getAllStackTraces (). От этого можно искать все отслеживания стека "основной" Поток для определения, каков основной класс. Это будет работать, даже если Ваш класс не будет работать в основном потоке.

45
ответ дан jodonnell 7 November 2019 в 18:03
поделиться

Или вы можете просто использовать getClass (). Вы можете сделать что-то вроде:

public class Foo
{
    public static final String PROGNAME = new Foo().getClass().getName();
}

И тогда PROGNAME будет доступно где угодно внутри Foo. Если вы не находитесь в статическом контексте, вам будет проще использовать это:

String myProgramName = this.getClass().getName();
-5
ответ дан 7 November 2019 в 08:03
поделиться

Также из командной строки Вы могли работать инструмент jps . Походит

jps -l 

, получит Вас, что Вы хотите.

3
ответ дан polarbear 7 November 2019 в 18:03
поделиться

Чтобы подробно остановиться на @jodonnell, можно также получить все отслеживания стека в системе с помощью Thread.getAllStackTraces () . От этого можно искать все отслеживания стека эти main Поток для определения, каков основной класс. Это будет работать, даже если Ваш класс не будет работать в основном потоке.

15
ответ дан Sid M 7 November 2019 в 18:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: