Выйдите из процесса, как только Jar будет завершен
Я использую компоновщик процессов для выполнения моего Runnable Jar с использованием сценария оболочки в моей программе Java. Ниже мой код Java
command = "t4essh -l " + username + " -p " + password + " -a 2500 -A password " + host + " \" cd " +"/data/jblext/JBLOADER.OUT" +";./test.sh "+tablename+" \"";
Runtime rtt = Runtime.getRuntime();
Process pr = rtt.exec(command);
OutputStream obj = pr.getOutputStream();
ByteArrayOutputStream byte1=new ByteArrayOutputStream();
obj.write(byte1.toByteArray());
String s=byte1.toString();
System.out.println("output from .sh " + s);
System.out.println("command"+ command);
boolean processFinish = false;
while(!processFinish) {
try {
Thread.sleep(500);
int exitVal = pr.exitValue();
System.out.println("Process"+exitVal);
System.out.println("Process exitValue: " + exitVal);
if (exitVal == 0)
{System.out.println("testet");
processFinish = true;}
else
{System.out.println("sysysyyyyyyyy");
processFinish = false;
}
} catch (Throwable t) {
processFinish = false;
System.out.println("catch"+ t);
/* GENERAL.println("Waiting for process finish : " + command);
System.out.println("Waiting for process finish : " + command);*/
// t.printStackTrace();
}
}
}
catch (Exception e) {
BufferedWriter bw = null;
System.err.println("Error executing parse command " + e.getMessage());
}
У меня есть мой скрипт на сервере Linux. Ниже приведен фрагмент кода
#!/bin/sh
echo "test"
java -jar Manager.jar $1
Когда я выполняю свою Java-программу, получаю с
catchjava.lang.IllegalThreadStateException: process has not exited
Мой Runnable Jar будет работать не менее 2 минут. Как выйти после того, как готовый сосуд будет готов?
2 ответа
System.exit()
это выход из всей системы, а не текущий процесс. Я думаю, что есть два распространенных способа выхода из текущего процесса (я имею в виду Method
).
1. Use `return`
2. Use `throw Exception`
Пример:
public void doSomething() {
while(your-condition) {
if(isOK()) {
throw new Exception(); -> It will exit from doSomething() method;
throw new MyException(); -> It will exit from doSomething() method;
return; -> It will exit from doSomething() method;
break; -> It will exit while loop;
System.exit(); -> It will exit from the whole system;
}
}
}
Основываясь на ваших комментариях, вы хотите вызвать Process.destroy ();
pr.destroy(); // <-- this will "kill" the running program...
// I'm not sure what it did to you.