2

このコードを実行する jar ファイルがあります。

public class InputOutput {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        boolean cont = true;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        while (cont) {
            System.out.print("Input something: ");
            String temp = in.readLine();
            if (temp.equals("end")) {
                cont = false;
                System.out.println("Terminated.");
            }
            else
                System.out.println(temp);
        }
    }
}

このjarファイルを実行し、入力を取得して出力を送信できる別のJavaクラスをプログラムしたいと考えています。出来ますか?私が持っている現在のコードはこれですが、動作していません:

public class JarTest {

    /**
     * Test input and output of jar files
     * @author Jack
     */
    public static void main(String[] args) {
        try {
            Process io = Runtime.getRuntime().exec("java -jar InputOutput.jar");
            BufferedReader in = new BufferedReader(new InputStreamReader(io.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(io.getOutputStream());
            boolean cont = true;
            BufferedReader consolein = new BufferedReader(new InputStreamReader(System.in));
            while (cont) {
                String temp = consolein.readLine();
                out.write(temp);
                System.out.println(in.readLine());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

ご協力いただきありがとうございます

4

5 に答える 5

1

Runtime.exec の使用はプラットフォームに依存します。

Windows を使用している場合は、先頭に追加してみてください。

cmd /c

java -jar .... etc. et

何かのようなもの:

...getRuntime().exec("cmd /c java -jar InputOutput.... 

これも参照してください:システム コールを作成し、stdout 出力を返します。

于 2009-02-14T05:05:11.850 に答える
0

別のプロセスで実行する必要があると言いましたが、元のコードの問題は次のとおりです。デッドロックがあります。

起動したプロセスが実行を開始し、その出力ストリームとエラー ストリームがすぐにいっぱいになります。JarTest は定期的に内容を読み取る必要があります。遅かれ早かれ、単一のスレッドで実行しているため、このスレッドは、ストリームの 1 つでデータが利用可能になるのを待っていることに気付くでしょう。この時点で、他のストリームからデータを収集する人は誰もいません。

したがって、専用スレッドを起動して、他のプロセスの標準ストリームからデータを収集する必要があります。

于 2009-02-14T19:00:18.050 に答える
0

プロセスの入出力スレッドについて必要なすべての情報がここに含まれています: リンク

于 2010-04-24T14:33:24.460 に答える