2014-01-15 102 views
1

我有一个可运行的JAR,我想从另一个Java应用程序调用。我曾尝试这种解决方案如何从java应用程序执行可运行JAR

[链接] how to run a java executable jar in another java program

我能够执行JAR,但似乎是线程都处于僵局,它永远不会生成输出。任何人都可以帮我一下吗?

+0

这是正确的方式,因为它显示在链接中。如果您单独运行它,那么该jar是否正常运行? – Dejan

+0

是的,如果我从bat文件运行Jar,它工作正常。 – user82504

+0

如果我从java程序运行Jar,jar运行良好。但是在需要产生输出的那一端,它停滞不前。 – user82504

回答

1

您可以使用来自普通Java的ProcessBuilder或使用来自ZeroTurnaround的库,如zt-exec。第二个工具可以让你轻松地添加例如执行超时,设置出口值等

在第一种情况下,它会看起来像:

Process p = new ProcessBuilder("java", "-jar myjar.jar").start(); 
p.start(); 

在第二:

new ProcessExecutor().command("java -jar myjar.jar").execute(); 
+0

我试过这个,但它的工作原理和应用程序挂起。 – user82504

+0

通过应用程序你的意思是执行jar或你的应用程序正在调用执行? –

+0

这是我的应用程序正在调用jar。实际上,应用程序无法从JAR中取回控制权,并且它一直在等待。而且,我在调试窗口看到有两个线程。我在上面提到的链接中的线程是DestroyVM线程。他们从来没有得到控制。 – user82504

0

另一种方法,如果你知道该方法有main方法,你的程序调用方法形式为main

Example.java

public void test() { 
    String[] starr = <- if you have some parameter 
    ProgramInJar.main(starr); 
} 

mytest.jar

public class ProgramInJar { 
    public static void main(String[] args) { 
     // your operation 
    } 
} 
0

我已经找到了解决办法。我已经更新了我的JDK,然后调用该jar并运行。谢谢大家的帮助和时间。

相关问题