无法从eclipse RCP运行c / c ++ exe

时间:2009-12-11 12:45:23

标签: cygwin eclipse-rcp eclipse-cdt

我正在尝试从eclipse c/c++ .exe(Java API)运行我的RCP

代码:

package com.jkt.rcp.texteditor.handlers;

import java.io.IOException;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;

//import com.jkt.runner.utils.Test;

public class RecordHandler extends AbstractHandler {

    private RecordingThread recordingThread;
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        System.out.println("inside RecordHandler...");

        recordingThread = new RecordingThread();

        recordingThread.start();

        return null;
    }



}

RecordingThread.java的代码是:

package com.jkt.rcp.texteditor.handlers;

import java.io.IOException;


public class RecordingThread extends Thread {
    private String file = "C:\\workspace\\JProAcceptanceBot\\Record.exe";

    public void run() {
        System.out.println("inside Run()...");

        try {
        Process proc = Runtime.getRuntime().exec(file);


        } catch (IOException e) {
            System.out.println("IOException:"+e);
            e.printStackTrace();
        }

    }
}

点击日食RecordHandler.java按钮后,实际上RCP会执行 但是当我单击按钮时,c/c++ exe没有响应,我的Java程序停止响应 否则如果我在我的日食中运行这个exe,它运行正常。

这个c/c++ exe是通过使用Eclipse CDT和Cygwin完成的。

请查看代码并提出建议?

2 个答案:

答案 0 :(得分:1)

我不确定,但您可能希望立即开始阅读通过proc.GetInputStream()获得的proc输入流。 In the documentation for Process

  

所有标准的io(即stdin,   stdout,stderr)运营将是   重定向到父进程   通过三个流   (Process.getOutputStream(),   Process.getInputStream()   Process.getErrorStream())。父母   进程使用这些流来提供   输入并从中获取输出   子。 因为有些原生   平台只提供有限的缓冲区   标准输入和输出的大小   溪流,未能及时写出来   输入流或读取输出流   子进程可能会导致   subprocess to block,甚至   死锁。

This article on javaworld描述了同样的问题并解释了解决方案(第3页)。

答案 1 :(得分:0)

请注意Sun bug 6468220(也在bug 6550942bug 6511002中说明):

在Windows平台上,Runtime.exec(String [] cmdarray)无法正确传递命令行参数,如果其中一个包含双引号(“)。

Passing/Expected           --> Actual

{ "ab\"c", "d\"ef" }       --> { "abc def" }
{ "a b \" c", "d \" e f" } --> { "a b ", "c d", "e f " }
{ "a", "", "b" }           --> { "a", "b" }
{ "\" a" }                 -->     java.lang.IllegalArgumentException

所以我的问题是:你试图执行的命令行是什么?