-1

ファイルを開き、それに行を書き込む c++ の実行可能ファイルがあります。それ自体で正常に動作します。

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    ofstream fout;
    fout.open("test.txt");
    if(fout.is_open()){
        cout<<"test"<<endl;
        fout<<"Hello World!" << endl;
    }
    fout.close();
    return 0;
}

そして、Javaで main() を作成して、そこから次のように呼び出しました。

public static void main(String args[]){
        File f = new Resources().getFile("test.exe");
        System.out.println(f.exists());
        String path = f.getAbsolutePath();


        try{
            Process p = new ProcessBuilder(path).start();
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while(line != null){
                line = br.readLine();
                System.out.println(line);
            }

            p.destroy();

        }catch(Exception e){
            System.out.println(e.getMessage());
        }

    }

メインの最初の行は私のプロジェクトからのもので、ファイルが見つかり、それも機能します。

問題は、exe を単独で実行すると、ファイルが作成されて書き込まれることです。java main() を実行すると、stdout から出力を取得してもファイルが作成されません。したがって、実行可能ファイルは実行されますが、ファイルは作成されません。

私は人々を狂わせます...どうすればいいですか?

4

2 に答える 2

2

Process.waitFor()メソッドの代わりにメソッドを使用しProcess.destroy()ます。

于 2012-12-13T08:12:20.347 に答える
0

これは最も簡単に使用できますが、特定の簡単なケースで機能することに注意してください。exe が最初に stderr に出力されると、ブロックされます。それ以外の場合は、ブロックしないようにプロセスの stdout と stderr を読み取る 2 つのスレッドが必要です。

    try
    {
        Process proc = Runtime.getRuntime().exec( "your exec here" );

        // handle process' stdout stream
        InputStream out = proc.getInputStream();
        //Thread err = proc.getErrorStream();
        BufferedReader br = new BufferedReader( new InputStreamReader( out ) );


        int exitVal = proc.waitFor();
        String line;

        while ( ( line = br.readLine() ) != null )
        {
            System.out.println( line );
        }
    }
    catch( Exception e )
    {
        System.out.println( "oops: " + e.getMessage() );
    }
于 2012-12-13T08:47:40.683 に答える