0

1 行のバッチ ファイルを作成しました: openscad -o %1 %2。

このコードは、コマンド プロンプトから export output.stl input.scad を実行すると機能します。

これをJavaで実行する必要があるため、コードを使用します:

System.setProperty("user.dir", directory);

String command = "cmd export " + name + ".stl " + name + ".scad";

Process pr = rt.exec(command);

directory は、このプロセスに関連するすべてのファイル (.bat、.scad、openscad.exe) の場所です。また、test.stl もこのディレクトリに出力されるはずです。

これを行うことでJavaからエラーは発生しませんが、エクスポートは行われません。

このコードの実行方法に何か問題がありますか? 同様の投稿で ProcessBuilder が推奨されていることは知っていますが、配列がどのように機能するかはわかりません。また、これを実行するための適切なドキュメントやチュートリアルも見つかりません。

4

3 に答える 3

0

この方法を試すことができます:

List<String> command = new ArrayList<String>();
command.add("export");
command.add(name+".stl");
command.add(name+".scad");

// get the output from the command
StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();

// print the output from the command
System.out.println("STDOUT");
System.out.println(stdout);
System.out.println("STDERR");
System.out.println(stderr);
于 2014-07-10T18:04:41.437 に答える
0

cmd ビットを含める必要はないと思います。ProcessBuilder を使用して Windows でメモ帳の実行可能ファイルに引数を与える方法の小さな例を書きました。それはあなたがしていることと同じでなければなりません。

package test;
import java.io.File;
import java.util.LinkedList;

public class MainTest {

    public static void main(String[] args){
        System.out.print("Starting");
        try
        {
            File f = new File("TestStuff.txt");
            f.createNewFile();
            ProcessBuilder pb = new ProcessBuilder();
            LinkedList<String> cmds = new LinkedList<String>();
            cmds.add("notepad");
            cmds.add("TestStuff.txt");
            pb.command(cmds);
            Process p = pb.start();
            p.waitFor();
        }
        catch (Exception e) {

        }
    }   
}

これは、CMD を開いてメモ帳 TestStuff.txt に入力するのと同じです。

また、一部のアプリケーションでは、終了するために入力ストリームから読み取る必要があることに注意することも重要です。メモ帳がそのように動作する場合、 p.waitFor() は外部プロセスが強制終了された場合にのみ返されます。そのため、必ずプロセスの入力ストリームを読んでください。

また、次のようなさまざまなjarファイルを使用してこれをテストしました

....
cmds.add("java");
cmds.add("-jar");
cmds.add(pathToSomeExecutableJar);
....

確かに、次のようなストリームから読み取るコードが含まれていました。

InputStream is = p.getInputStream();
BufferedReader bsr = new BufferedReader(new InputStreamReader(is));
String s;
while ((s = bsr.readLine()) != null) System.out.println(s);
于 2014-07-10T20:05:53.590 に答える