Java как запустить другую программу

Необходимо из Java программы запустить стороннее приложение БЕЗ ожидания закрытия запущенного приложения.

запустили jar’ник — открылся блокнот (windows среда) и завершилась работа jarника

  • Вопрос задан более трёх лет назад
  • 7682 просмотра

1 комментарий

Оценить 1 комментарий

А в чём, собственно, проблема? Процесс запущенный ProcessBuilder -ом завершается по выходе из запускающего приложения? Или вы не знаете каким вызовом WinAPI воспользоваться?

Решения вопроса 1

Разбирайтесь со своей программой. Зачем она чего-то ждёт? Она вызывает Process.waitFor() ? Потому что иначе вызывающая программа не ожидает завершения вызванной. Вот код для примера:

import java.io.IOException; public class Run < public static void main(String[] args) < try < new ProcessBuilder(«/usr/bin/kwrite»).start(); >catch (IOException e) < e.printStackTrace(); >> >

Запускает программу и завершает работу (в Linux). Подставьте запуск notepad и проверьте. Неужели Java-программа не завершит работу?

java урок_1(Установка , Запуск, Написание первой программы)

Ответ написан более трёх лет назад
Нравится 2 3 комментария

Блокнот открылся, программа висит запущенной пока не закрою блокнот — вопрос остается открытым.
Как открыть блокнот и не закрывая его завершить Java приложение

Виндопроблемы. Посмотрите, может это поможет. В общем, вам нужно найти аналог nohup для windows. Может start /p notepad вместо notepad поможет?

Источник: qna.habr.com

Как из Java приложения запустить другую программу?

Самый простой и базовый способ – с помощью метода Runtime.getRuntime().exec() . В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк «имя=значение» . Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.

Рекомендуемый, и более управляемый способ – использование класса ProcessBuilder . Он же применяется внутри метода exec . Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.

Читайте также:
Как пользоваться программой колибри

В результате запуска команды создается объект класса Process . Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle . Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.

Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.

Источник: itsobes.ru

Как установить java JDK17 на Windows 10 и настроить переменные окружения.

Русские Блоги

При запуске внешней программы на Java используется метод exec () класса java.lang.Runtime. Этот метод возвращает класс Process.
Если вы хотите захватить вывод работающей программы, используйте класс Process. Класс Process имеет три метода:
Process.getOutputStream(), Process.getInputStream(), Process.getErrorStream().
Соответствует стандарту stdin, stdout, stderr. Поэтому, если вы хотите захватить вывод программы, вы должны использовать
Process.getInputStream()。

Пример, который я привел ниже, состоит в том, чтобы запустить программу ping и затем вывести ее вывод на экран.
Эффект такой же, как прямой запуск программы ping.
Для примеров использования других методов класса Process, пожалуйста, скачайте примеры API библиотеки классов jdk1.1, которые я предоставил.

import java.io.*;
class Main <
public static void main(String[] args) <
try <
String cmd = «ping «;
String param =»202.112.58.200″;
Process child = Runtime.getRuntime().exec(cmd+param);
// получить вывод ping
InputStream child_in = child.getInputStream();
int c;
while ((c = child_in.read()) != -1) <
// System.out.println(«kkk»);
System.out.print((char)c);
>
child_in.close();
> catch (IOException e) <
System.err.println(e);
>
>
>

Два других простых примера: вызов браузера ie с помощью java (iexplore.exe и файл класса находятся в одном каталоге)

Читайте также:
Как называется вредоносная программа которая проникает на компьютер вместе с другими программами

import java.io.*;
class Main <
public static void main(String[] args) <
try <
String cmd = «iexplore.exe «;
String param =»http://www.java3z.com/»;
Process child = Runtime.getRuntime().exec(cmd+param);
// получить вывод ping

> catch (IOException e) <
System.err.println(e);
>
>
>

Это можно сделать в jdk1.5:
import java.io.*;
public class ProcessTest public static void main(String args[]) throws IOException Process p = new ProcessBuilder(«iexplore.exe»,»http://www.java3z.com/»).start();
>
>

Источник: russianblogs.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru