2014-06-23 53 views
0

我需要的是从我的java代码中运行另一个jar文件内的jar文件。 我有这个turnOffClient.jar文件,我把它放在我的ChatSystemClient.jar文件中,我想要做的是从xClient.jar主类代码执行(启动,运行)turnOffClient.jar文件。 我曾尝试:从jar的主类运行第二个代码(jar)

Runtime.getRuntime().exec(this.getClass().getResource("/jars/TurnOffClient.jar").toString()); 

另外:

TurnOffClient.main(args); 

看来工作,但是当我关闭第一个Java应用程序中的第二个关闭过,这是我不想要的。 我的目录: https://imagizer.imageshack.us/v2/253x254q90/856/ztuz.png

回答

2

这是一个不好的编程习惯,而是创建一个调用两个程序的新类。

实施例:

Program a; 
Program b; 

    a.run(); 
    while(a.isAlive()){ 
     if(/*we need to run program b*/){ 
     b.run(); 
     break; 
     } 

    } 
+0

你真的*想要运行一个“a.isAlive”的紧密循环吗?在我看来,像捆绑一个处理器没有收获... – tucuxi

+0

@tucuxi实际上,好点,可能它是一个好主意,让进程进入睡眠,只是在if语句后添加:Thread.sleep(100); – nafas

+0

我是这样做的: \t public static void main(String [] args){ \t \t Thread = new Thread(new ChatSystemClient()); \t \t t.start(); \t \t new TurnOffClient()。start(); \t} 创建新的线程,因为我需要同时运行这两个程序。 但是,每当我关闭其中一人时,他们都会关闭,但我只想关闭被点击的人。 – ESipalis

0

这些是图形应用程序?当“关闭”时,您可以使应用程序A(打开应用程序B)不真正关闭,但在应用程序B实际关闭之前继续在后台工作。

启动时,JVM只是实例化的B一类特殊的(称之为BMain)并调用其public void main(String[] args)方法。没有任何理由,你不能直接从自己的代码(而不是通过getRuntime().exec())调用该方法:

BMain.main("my arguments here"); 

如果在关闭时,其窗口中的一个进程不会立即结束(追捕并消灭任何JFrame.EXIT_ON_CLOSE实例中,假设使用的是摇摆),和它调用的主要如上,将正常运行,即使是‘闭合’。