Вопрос-ответ

Executing another application from Java

Выполнение другого приложения из Java

Мне нужно выполнить пакетный файл, который запускает другое Java-приложение. Мне все равно, выполняется ли оно успешно или нет, и мне не нужно фиксировать какие-либо ошибки.

Возможно ли это с помощью ProcessBuilder? Каковы последствия, если я не фиксирую ошибки?

Однако мое требование - просто выполнить другое Java-приложение.

Переведено автоматически
Ответ 1

Runtime.getRuntime().exec() Подход довольно хлопотный, как вы скоро узнаете.

Взгляните на проект Apache Commons Exec. Он позволяет абстрагироваться от множества распространенных проблем, связанных с использованием Runtime.getRuntime().exec() и ProcessBuilder API.

Это так же просто, как:

String line = "myCommand.exe";
CommandLine commandLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);
int exitValue = executor.execute(commandLine);
Ответ 2

Да, это возможно с помощью ProcessBuilder.

Пример ProcessBuilder:

import java.io.*;
import java.util.*;

public class CmdProcessBuilder {
public static void main(String args[])
throws InterruptedException,IOException
{
List<String> command = new ArrayList<String>();
command.add(args[0]);


ProcessBuilder builder = new ProcessBuilder(command);
Map<String, String> environ = builder.environment();

final Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("Program terminated!");
}
}

Проверьте эти примеры:

http://www.rgagnon.com/javadetails/java-0014.html

http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html

Ответ 3

Вот пример использования ProcessBuilder для выполнения вашего удаленного приложения. Поскольку вас не волнуют ввод / вывод и / или ошибки, вы можете поступить следующим образом:

List<String> args = new ArrayList<String>();
args.add ("script.bat"); // command name
args.add ("-option"); // optional args added as separate list items
ProcessBuilder pb = new ProcessBuilder (args);
Process p = pb.start();
p.waitFor();

метод waitFor() дождется завершения процесса, прежде чем продолжить. Этот метод возвращает код ошибки процесса, но, поскольку вам это безразлично, я не включил его в пример.

Ответ 4

Вы можете выполнить пакетную инструкцию или любое другое приложение, используя

Runtime.getRuntime().exec(cmd);

  • cmd - это команда или путь к приложению.

Также вы можете дождаться выполнения и получения кода возврата (чтобы проверить, правильно ли он выполнен) с помощью этого кода:

  Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
int exitVal = p.exitValue();

Здесь вы найдете полное объяснение различных типов вызовов
http://www.rgagnon.com/javadetails/java-0014.html

2023-05-04 06:18 java