Двоичное имя в Java-программе, скомпилированной gcj
-
24-09-2019 - |
Вопрос
Есть ли способ узнать имя исполняемого файла, который пользователь запускал для запуска программы, из Java-программы, скомпилированной gcj?
В C имя argv[0] (изнутри main) — это имя, но в Java массив args, переданный в main, содержит только аргументы основного класса.При работе с обычной командной строкой Java это имеет некоторый смысл, поскольку исполняемый файл всегда будет Java (или java.exe).
Однако при запуске Java-программы, скомпилированной gcj, имя исполняемого файла, который запускал пользователь, может быть полезной информацией.В идеале я хотел бы найти это имя, не прибегая к специфичным для платформы подходам, таким как чтение /proc (и тому, что эквивалентно для Windows), но, возможно, это невозможно.
Решение
После долгих поисков в Google Code Search я обнаружил, что имя программы спрятано в gnu.gcj.progname
свойство.Пример программы:
public class ProgName {
public static void main(String... args) {
System.out.println(System.getProperty("gnu.gcj.progname"));
}
}
Отредактировано, чтобы добавить: gnu.gcj.progname
документировано в libgcj
Свойства времени выполнения тоже, так что, к счастью, это не просто внутренняя деталь реализации.