2013-01-03 3 views
1

У меня есть 2 файла jar. Я хочу, чтобы Jar A открывал Jar B, затем имел jar A, заканчивая, оставив Jar B включенным. Как мне это сделать?Как выполнить Jar-файл в новом процессе и закрыть оригинальную Jar?

EDIT: Я имел в виду, я хочу Яры открыть в одном экземпляре виртуальной машины Java, то я хочу, чтобы Яры exectue JarB в новом экземпляре виртуальной машины Java, то Яры использует System.exit (0)

+0

От * "закрыть оригинальную Jar?" * ITYM закрыть JVM работает с Jar. Но я предпочитаю стратегию «classpath» @ gd1. –

ответ

1

Чтобы начать новую JVM вы бы начать внешний java процесс так же, как и любой другой команды OS , посмотрите документацию по ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("java", "-classpath", "B.jar", "B.BMain"); 
Process p = pb.start(); 

Есть много предостережений для запуска внешнего процесса в Java, вы найдете много материала здесь на SO поиска Process и ProcessBuilder


jar файлы не запускаются и не завершаются; то есть jvm, начатый, например, командой java. Например, при выполнении следующей команды:

java -classpath A.jar A.Main 

Новый jvm запускается и выполняет main метод класса A.Main

Теперь, когда метод Main.main(), может вызова методов классов в B.jar, если это было в classpath. Например, если команда была

java -classpath A.jar;B.jar pkg.A 

Тогда в A.Main.main может быть

B.SomeClass.SomeMethod() 

Где B находится в B.jar

Это то, что вы имеете в виду, когда вы говорите «открытой b.jar»? Обратите внимание, что это не «закрывает» другой «A.jar», что бы это ни значило.

+0

Я хотел, чтобы JarA открывался в одном экземпляре JVM, тогда я хочу, чтобы JarA вывел JarB в новый экземпляр JVM, тогда JarA использует system.exit (0) –

+0

большое спасибо –

+0

Добро пожаловать –

1

Вы хотите запустить новый экземпляр JVM для запуска другого Jar, а затем завершить работу? Это не так часто.

В качестве альтернативы, вы можете просто включить Jar B в путь к классам и использовать классы, которые она предоставляет из кода в Jar А.

0

Предполагая, что, даже прочитав ниже ответы, вы все еще хотите вызывать «JAR-B» в отдельном процессе JVM, который не привязан к родительскому процессу «JAR-A», лучшим выбором может быть использование чего-то подобного к «cmd/start» (для окон) или используя «sh ... &» (для * nix) (из вашей java-программы в JAR-A)