Выйдите из процесса, как только 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.
Другие вопросы по тегам