0

C++ (boost ライブラリを使用) で記述され、xcode でコンパイルされたコンソール アプリケーションがあります。この UNIX 実行可能ファイルはデーモンと通信し、特定のタスクを実行します。すべての引数を指定してコマンド ラインからこのコンソール アプリケーションを実行すると、完全に機能します。しかし、Java コードからこのコンソール アプリケーションを呼び出すと、実行されません。私はProcessBuilderそれを実行するために使用しています。同じコードを使用してシステム関連のコマンドを実行できます。私が使用しているコンソール アプリケーションは、静的ライブラリに依存しています。

Jdk - 1.7、Mac OSX - 10.7.5、XCode - 4.6.2、Boost バージョン - 1.53.0 を使用している仕様は次のとおりです。

私が使用しているコード:

String str[] = {"/bin/sh", "-c" ,"/Users/user/Downloads/cppapplication_1"};
           ProcessBuilder builder = new ProcessBuilder(str);
       builder.directory(new File("/Users/user/Downloads/")); 
        final Process process = builder.start();
        process.waitFor();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

エラーは発生しません。そのぶら下がっています。

どんな助けでも大歓迎です。

4

3 に答える 3

0

別のオプションは、を使用することOpen System callです。

あなたが使用することができますString str[] = {"/bin/sh", "-c", "open -a Terminal /Users/user/Downloads/cppapplication_1"};

それが機能した正確な理由はわかりopen system callません。同じ問題に直面した後、サードパーティのUNIX実行可能ファイルはコマンドラインから正常に機能しましたが、Javaコードでは機能しませんでした。Javaコードから呼び出すと、プロセスは終了せず、スタウトへの出力も生成しませんでした。その時間Open system callは私にとってはうまくいきました.唯一の問題は、新しいターミナルウィンドウを起動することでした. osascript -e 'tell application "System Events" to set visible of process "'Terminal'" to false'ターミナルウィンドウを非表示にすることで管理しました。

于 2013-07-24T03:43:36.443 に答える