Двоичное имя в Java-программе, скомпилированной gcj

StackOverflow https://stackoverflow.com/questions/2384268

  •  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 Свойства времени выполнения тоже, так что, к счастью, это не просто внутренняя деталь реализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top