从已启动的jar文件触发方法,该文件通过Runtime ... exec(“..”)加载到java文件中

时间:2013-04-03 14:56:47

标签: java jar runtime.exec inter-process-communicat

这就是我想要做的事情:

我需要从java文件中启动两个jar文件,并且我想从第一个启动的jar文件中调用一个方法,当我从第二个jar文件中读取特定状态时。我想出了如何从jar文件中读取outsputstream。 (我也知道,它不是打印出来的jar文件,而是jar文件中的类。我只是用这种方式来解释我用一个java文件来启动两个jar文件)

long l = System.currentTimeMillis();
Process theProcess1 = Runtime.getRuntime().exec("java -jar \"C:/test.jar\"");

inStream = new BufferedReader(new InputStreamReader( theProcess1.getInputStream() ));  
...

我现在可以读取jar文件的输出。

在一个特殊的关键字上,我希望第一个启动的jar运行某个方法(非静态)。

e.g:

if(theProcess2 output a certain statuscode)
{
   start a certain Method from executed jar file "in" theProcess1

}

我认为可以使用theProcess1输出,但我不知道如何在jar文件中读取此流。 (jar文件不知道它是通过java文件启动的。

任何想法?

1 个答案:

答案 0 :(得分:1)

您无法访问其他java进程类加载器类定义。 有关如何正确加载jar的信息,请参阅此问题:How to load a jar file at runtime

加载jar后,可以使用Class.forName访问第二个jar所需的类

编辑: 这是一个帮助您阅读过程标准输出的小片段。

//open a buffered reader on process std output
    InputStreamReader ir = new InputStreamReader(theProcess1.getInputStream());
    BufferedReader in = new BufferedReader(ir);

   //read it line per line
    String line;
    while ((line = in.readLine()) != null) {

       System.out.println(line);

    }