Процесс возрождения Java - PullRequest
0 голосов
/ 15 июня 2010

Я делаю программу, похожую на редактор. Если пользователь выбирает Файл-> Открыть в главном окне, я хочу запустить новую копию процесса редактора с выбранным именем файла в качестве аргумента. Однако для этого мне нужно знать, какая команда использовалась для запуска первого процесса:

java -jar myapp.jar blabalsomearguments // --- need this information
> Open File (fileUrl)
> exec("java -jar myapp.jar blabalsomearguments fileUrl");

Я не ищу внутрипроцессное решение, я уже реализовал это. Я хотел бы получить преимущества, которые приносят отдельные процессы.

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Поскольку вы запускаете Java -> Java, вы можете использовать существующий classpath для установки classpath в командной строке. Подобные вещи работают очень хорошо и в среде разработчиков.

ProcessBuilder selfLauncher = new ProcessBuilder(
 "java", "-cp", System.getProperty("java.class.path"),
 "com.my.mainClass" );
selfLauncher.start();

Обновление: Для исполняемых jar-файлов у вас будет classpath, который является просто относительным путем к самому jar-файлу. Если вам нужны аргументы командной строки, вам придется сохранить их из main и повторно применить их при запуске.

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

public class TestJarPath {
    public static void main(String args[]) throws Exception {
        for (String s : args)
         System.out.print("[" + s + "] ");
        System.out.println();

        String cp = System.getProperty("java.class.path");
        for (String s : cp.split(";"))
          System.out.println(s);
    } 
}

Для java -jar ..\tst.jar X вы получите вывод, подобный:

[X]
..\tst.jar
0 голосов
/ 15 июня 2010

Насколько я знаю, нет портативного способа получить эту информацию.Я нашел свойство во время выполнения gcj, но сомневаюсь, что оно охватит большой процент пользователей.

Я думаю, что принятая практика - "Попробуй и помолись":

Надеюсь, что этопуть (путь доступен, поэтому его можно проверить)

, если нет, проверьте, определен ли JAVA_HOME, и используйте его для поиска java.

если не отметьте наиболее вероятные места на всех ОС, для которых вы получили отчеты об ошибках.

Что ж, это грязно ... лучше всего проверить JAVA_HOME и путь и спроситьПользователь может настроить JVL явно, если это не удается.

0 голосов
/ 15 июня 2010

Если ничего не помогло, попробуйте написать пакетный скрипт для запуска приложения.В Windows вы можете передать% CmdCmdLine% в Java, чтобы получить всю командную строку.

См. http://www.robvanderwoude.com/parameters.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...