2009-12-11 45 views
1

運行C/C++的exe我試圖運行我c/c++ .exe從日食RCP(Java API)。無法從Eclipse 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程序停止響應。
否則,如果我在我的eclipse中運行這個exe,它運行良好。

c/c++ exe已通過使用Eclipse CDT和Cygwin製造。

請看看轉換成代碼和建議?

回答

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 

所以我的問題是:什麼是你想執行的確切命令行

1

我不知道,但你可能要立即開始閱讀inputstr?通過proc.GetInputStream()得到的procIn the documentation for Process

其所有標準IO通過三個流 (Process.getOutputStream(), Process.getInputStream(), (即標準輸入,標準輸出 ,標準錯誤)操作將被 重定向到父進程 Process.getErrorStream())。父 過程中使用這些流 輸入從 子喂,並得到輸出。 因爲一些天然 平臺僅提供有限的緩衝 大小爲標準輸入和輸出 流,未能及時寫 輸入流或讀出的子過程的輸出流 可以使得 子阻塞,甚至 死鎖。

This article on javaworld描述了同樣的問題,並解釋瞭解決方案(第3頁)。

+0

我曾經嘗試過的東西,但沒有luck.Actually我在我的本地代碼生成一個文本文件,一些材料寫入該文本文件。 – Vishal 2009-12-14 10:08:47

+0

不管什麼.exe,這個問題都存在。你在調試器中看過proc.GetInputStream()的輸出嗎? – 2009-12-14 12:29:19

+0

Thanx jilles。這個問題已經被你的建議解決了。實際上我是在用proc.GetInputStream()做一些錯誤處理。現在我的c/C++ exe在RCP中運行正常。 – Vishal 2009-12-16 09:32:46