2010-12-02 8 views
2

私は子プロセスを作成するプログラムを持っていますが、その親からすべてのクラスパスを継承します。 Javadocの、それは言う:JavaはRuntime.exec()でクラスパスを継承します

パブリックプロセスExecは(文字列[] cmdarray、 は[] envpを文字列) はIOExceptionを

スロー指定された環境を持つ独立したプロセスで指定されたコマンドと引数を実行します。

コマンドラインのトークンを表す文字列cmdarrayと環境変数設定を表す文字列envpが与えられている場合、このメソッドは指定されたコマンドを実行するための新しいプロセスを作成します。

envpがnullの場合、サブプロセスは現在のプロセスの環境設定を継承します。

envpをnullに設定すると、何も継承されませんでした。ここで

コードです:

System.out.print("Debug system path: "+System.getProperty("java.class.path")); 
      startTime(); 
Process proc = Runtime.getRuntime().exec(cmd,null); 

私はパス情報を見ることができますが、これらのパス情報は、新規作成されたプロセスによって継承されません。

答えて

4

アプリケーションのクラスパスはどのように指定しましたか? CLASSPATH環境変数を使用していない場合、継承されません。

Runtime.execメソッドは任意のネイティブアプリケーションを呼び出すことができます。ここでのenvpはJava環境ではなくシステム環境を指します。あなたが子供のjavaプロセスにクラスパスを渡したい場合は

、あなたはとても明示的に行うことができます。

String[] cmdarray = new String[] { 
    "java", "-classpath", System.getProperty("java.class.path"), "com.example.MyChildApp", "appParam"}; 

Process p = Runtime.getRuntime().exec(cmdarray); 
+0

私は試しても正しく動作しません。どこが間違っているのかわからない – Kavin

0

いいえ行うことができます。あなたがexecを呼び出すときのあなたの 'classpath'は、あなたが現在呼び出す時に現在のクラスローダーに隠れているものです。一般に、クラスローダーにクラスパスを教えてもらうことはできません。それは、データベース、または惑星の火星からクラスをフェッチすることができます。

java.class.pathを読むと、アプリケーションの起動時に何が起きているのかを知ることができますが、何か他のものを起動するときに何が起きているのかはわかりません。

0

最後に、 "-cp System.getProperty(" java.class.path ")をcmdに挿入して動作させる必要があります。

これを実行する方法はありますか?

+0

前にも触れましたが、これが最善の方法だと思いますが、 'System.getProperty(" java.class.path ")'にマッチするように 'CLASSPATH'環境変数を設定することもできますenvpを通じて子プロセスを実行します。 – ykaganovich

+0

私はenvpで設定すると、他の奇妙な問題が発生します。なぜか分からないので、この方法で試してみるとうまくいきました。 – Kavin

関連する問題