0

最初に、サイトでこの問題に関するいくつかのQを確認しましたが、問題を解決する回答は見つかりませんでした。

私はJavaで書かれたプログラムを持っていて、それはC++で書かれたcmdプログラムを呼び出します。(実際のソースがないため、これは前提です)C++プログラムの予想されるI/ Oを知っています。コマンドでは、2行の出力であり、文字列の入力を待ちます。プログラムの最初の出力行がエラーストリームを経由していることを知っており、正しく受信します(これは予想されます)が、エラーまたは入力ストリームで2番目の行を取得しません。最初の行(エラー行)の直後にプログラムに書き込もうとしましたが、スタックしませんでしたが、応答がありませんでした。ストリームごとに3つの異なるスレッドを使用してみましたが、最初の行以降の入力/エラーストリームで何も受信されず、プログラムは出力ストリームを介した書き込みに応答しませんでした。

私の初期化子は次のとおりです。

Process p = Runtime.getRuntime().exec("c:\\my_prog.exe");
BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

それはまったく可能ですか、それともC ++プログラムに依存しますか?

ありがとう、Binyamin

4

3 に答える 3

0

Java から C や C++ などのネイティブ アプリケーションを呼び出す場合は、JNI を使用する必要があります。

于 2010-12-26T17:47:09.597 に答える
0

Javaでコマンドラインを実行する方法は次のとおりです。このコマンド ラインは、任意のプログラムを実行できます。

private String executionCommandLine(final String cmd) {

    StringBuilder returnContent = new StringBuilder();
    Process pr;
    try {
        Runtime rt = Runtime.getRuntime();
        pr = rt.exec(cmd);

        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line = null;

        while ((line = input.readLine()) != null) {
            returnContent.append(line);
        }
        input.close();
        LOG.debug(returnContent.toString());

        // return the exit code
        pr.waitFor();
    } catch (IOException e) {
        LOG.error(e.getMessage());
        returnContent = new StringBuilder();
    } catch (InterruptedException e) {
        LOG.error(e.getMessage());
        returnContent = new StringBuilder();
    }

    return returnContent.toString();

}
于 2010-12-26T18:35:04.787 に答える
0

開始時にプログラムに入力を入れることをお勧めします。必要なときに入力として適切に使用されます。

于 2010-12-26T17:56:24.573 に答える