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

从启动的jar文件中触发方法,该jar文件是通过java文件中的Runtime…exec(“.”)加载的,java,jar,runtime.exec,inter-process-communicat,Java,Jar,Runtime.exec,Inter Process Communicat,这就是我想做的: 我需要从一个java文件中启动两个jar文件,当我从第二个jar文件读取特定状态时,我想从第一个启动的jar文件调用一个方法。我知道如何从jar文件中读取输出流。(我也知道,打印出来的不是jar文件,而是jar文件中的类。我只是以这种方式模拟了这个问题,以清楚地解释我使用了一个java文件,其中我启动了两个jar文件) 我现在可以读取jar文件的输出了 在一个特殊的关键字上,我希望第一次启动的jar运行某个方法(非静态) e、 g: 我认为可以使用Process1输出,但我不知

这就是我想做的:

我需要从一个java文件中启动两个jar文件,当我从第二个jar文件读取特定状态时,我想从第一个启动的jar文件调用一个方法。我知道如何从jar文件中读取输出流。(我也知道,打印出来的不是jar文件,而是jar文件中的类。我只是以这种方式模拟了这个问题,以清楚地解释我使用了一个java文件,其中我启动了两个jar文件)

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

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

e、 g:

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


有什么想法吗?

您不能访问其他java进程类加载器类定义。 有关如何正确加载jar,请参见以下问题:

加载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);

    }

嘿,谢谢。我需要在单独的vm中运行两个jar。我认为必须可以使用Process类的输出流?但是我如何在我的jar文件中使用它作为输入流?这是一个硬约束,但您可以尝试使用这里给出的答案的方法从字节加载类。我认为您应该通过使用RMI for e重新考虑您的设计示例(或任何其他远程方法调用策略)。抱歉,我刚刚意识到我可能被您的问题公式弄糊涂了。您是否希望java程序对另一个java程序的控制台输出作出反应?我实现了一个java程序,它对给定启动jar文件的输出作出反应(通过运行时…exec(“…”))还有进程inputstream。我想要的是从java类向启动的jar文件写入一些东西,我想要jar文件对此做出反应。所以我认为这是我需要的一种进程通信。我只是想,当进程类有一个输入流时,我可以从中读取system.out.println()从启动的jar中,流程类的输出流是另一种方式(将某物发送到jar文件)…或者简单地:通过以下代码:Process theProcess1=Runtime.getRuntime().exec(“java-jar\”C:/test.jar\”;process1.getOutputStream();
if(theProcess2 output a certain statuscode)
{
   start a certain Method from executed jar file "in" theProcess1

}
//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);

    }