1

私のプログラムでは、Java ソースをコンパイルする .bat ファイルを実行する必要があります。これは正常に動作していますが、compile.bat の出力 (およびエラーの可能性) を取得し、それを GUI のテキスト ペインに追加するソリューションを探しています。次のコードがありますが、実行すると、ペインに何も出力せず、エラーも発生せずにプロセスが実行されます。

GenerationDebugWindow.main(null);

Process process = rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"});
Scanner input = new Scanner(process.getInputStream());

InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);

String line;
int exit = -1;

while ((line = reader.readLine()) != null) {
    // Outputs your process execution
    try {
        exit = process.exitValue();
        GenerationDebugWindow.writeToPane(line);
        System.out.println(line);
        if (exit == 0)  {
            GenerationDebugWindow.writeToPane("Compilation Finished!");
            if(new File(file + "/mod_" + WindowMain.modName.getText()).exists()){
                GenerationDebugWindow.writeToPane("Compilation May Have Experienced Errors.");
            }
        }
    } catch (IllegalThreadStateException t) {

    }
}

GenerationDebugWindow

private static JTextPane outputPane;
public static void writeToPane(String i){
    outputPane.setText(outputPane.getText() + i + "\r\n");
}
4

3 に答える 3

2

使用する:

Runtime.getRuntime().exec( "cmd.exe /C " + file.getAbsolutePath() + "\\compile.bat" );
于 2012-07-21T00:45:34.043 に答える
1

この質問を参照してください: 入力/出力ストリームを使用した Java プロセス

プロセスの出力がエラー ストリームに送られる可能性があります。ただし、ProcessBuilder は System.getRuntime().exec() を直接使用するよりも便利なクラスです。

以下の例では、エラー ストリームを出力先と同じストリームにリダイレクトするように ProcessBuilder に指示しています。これにより、コードが簡素化されます。

ProcessBuilder builder = new ProcessBuilder("cmd.exe /C " + file.getAbsolutePath() + "\\compile.bat");
builder.redirectErrorStream(true);
builder.directory(executionDirectory); // if you want to run from a specific directory
Process process = builder.start();
Reader reader = ...;
String line = null;
while ((line = reader.readLine ()) != null) {
    System.out.println ("Stdout: " + line);
}

int exitValue = process.exitValue();
于 2012-07-21T00:47:09.593 に答える
0

私のプログラムでは、Javaソースをコンパイルする.batファイルを実行する必要があります。

*nixおよびOSXのユーザーは、を使用してソースをコンパイルする必要がありますJavaCompiler

STBCは、の使用例ですJavaCompilerオープンソースです。JTextAreaソースとエラーを保持するためにaではなくaを使用しますJTextPaneが、適応するのは簡単なはずです。

コンパイルエラー 正常にコンパイルされました

于 2012-07-21T02:47:44.153 に答える