2017-11-24 18 views
0

ProcessBuilderクラスを使用して他のJavaファイルを実行しようとしています。外部の.javaファイルを実行するJava ProcessBuilderパラメータを設定する方法は?

javaファイル+ファイル名+ .javaの全パスの入力を取得してコンパイルしたいと考えています。

例、入力:C:\Windows\test.java

そして、私はString変数FILE_LOCATIONに入力を保存し、入力の.javaファイルをコンパイルするprocessbuilderを呼び出します。

は、ここに私のコードです:

static String JAVA_FILE_LOCATION; 
static String command[] = {"javac", JAVA_FILE_LOCATION}; 
ProcessBuilder processBuilder = new ProcessBuilder(command); 
Process process = processBuilder.start(); 
process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start(); 

しかし、私はパラメータを設定する方法がわかりません。

process = new ProcessBuilder(new String[]{ 
"java","-cp",A,B}).start(); 

このパラメータはどのように設定する必要がありますか?(A, B)

+1

javaコンパイラを呼び出すには、 'javax.tools.ToolProvider.getSystemJavaCompiler()'を使って外部プロセスを実行する必要があります。 –

答えて

0

さんが言わせて、あなたの正確な質問に答えるためには、例えば、あなたのクラスは、パッケージcom.yourcompany.yourproductであり、あなたのクラスファイルは、次に/dir/to/your/classes/com/yourcompany/yourproduct/Yourclass.c‌​lass.

A = "/dir/to/your/classes"B = "com.yourcompany.yourproduct.Yourclass"です。

ただし、注意すべき点がいくつかあります。あなたのコードを見て:あなたはディレクトリにCDに必要とその後、実行javac

static String JAVA_FILE_LOCATION; 
static String command[] = {"javac", JAVA_FILE_LOCATION}; 
ProcessBuilder processBuilder = new ProcessBuilder(command); 

号。これを行う最も簡単な方法はprocessBuilder.directory(new File("/dir/to/your/classes"))を呼び出すことです。次に、javacにソースファイル("com/yourcompany/yourproduct/Yourclass.java")の相対パスを与える必要があります。

Process process = processBuilder.start(); 
process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start(); 

実行する前に最初のプロセスがコンパイルを完了するまで待ちます。上の2行の間に、process.waitFor();を挿入します。エラーがないかどうかを確認し、最初の処理が成功した場合にのみ2番目の処理を実行することもできます。

ところで、文字列配列のすべての長時間の作成の必要はありません。 varargs:process = new ProcessBuilder("java", "-cp", A, B).start();を使用してください。

+0

本当にありがとうございます。 – SongDoHou

関連する問題