2011-04-08 192 views
0

執行任何exe文件我有一個Java應用程序中,用戶可以給任何可執行文件(.exe),應用程序將在系統上運行它。像CMD.EXE,NOTEPAD.EXE或UNIX的a.out等從Java應用程序

現在我已經通過大量的例子只是不打算之後編寫的代碼似乎爲用戶創建文件的notepad.exe工作正常工作,但編寫的文件使用TC++並且全部不起作用。任何人都可以指出這裏錯誤的原因是什麼?

import java.io.*; 

class NewThread implements Runnable{ 
    Thread t; 

    NewThread(){ 
     t = new Thread(this, "Demo Thread"); 
     System.out.println("child thread:" + t); 
     t.start();  
    } 

    public void run(){ 
     try 
     { 
     String line;  
     Process p = Runtime.getRuntime().exec("C:\\TC\\BIN\\AA.EXE"); 
     InputStream in = p.getInputStream(); 
     OutputStream out = p.getOutputStream(); 
     InputStream err = p.getErrorStream(); 
     BufferedReader br= new BufferedReader(new InputStreamReader(in)); 
     System.out.println("Chid running"); 
     while((line=br.readLine())!=null){ 
      System.out.println(line); 
     } 
     //p.destroy(); 


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

     } 
     System.out.println("Child thread exiting"); 

} 
} 
    class ThreadDemo { 
     public static void main (String args[]){ 
      new NewThread(); 
      try { 
       for(int i=05;i>0;i--){ 
        System.out.println("Main Thread:" + i); 
        Thread.sleep(1000); 
       } 
      } catch (InterruptedException e){ 
       System.out.println("Main thread Interrupted"); 
      } 
      System.out.println("Main thread exiting"); 
     } 
    } 

.... OK ...當我運行使用Eclipse的>子線程退出[所有System.out的消息被印在控制檯,但要由印不是那些它不工作方式.exe AA.exe根本不運行。其他的一些要點:

  1. 它運行正常,沒有異常拋出唯一的問題是 AA.exe的輸出是不可見的任何地方。
  2. 它打印退出代碼7爲進程p ...任何線索????
  3. Notepad.exe的或當通過此代碼調用MSWord.exe甚至TC.exe的運行完全正常 。

這裏的代碼AA.exe:

#include <stdlib.h> 
#include <stdio.h> 
#include <values.h> 
#include <time.h> 

int main(void) 
{ 
    int i,j; 

     for(j=0;j<150;j++) 
     { 
    // randomize(); 
     for(i=0;i<200;i++) 
    printf("%d\n", rand() % MAXINT); 
     } 
    return 0; 
} 
+2

首先:界定「不工作」:** **怎麼它不能正常工作。第二:**至少**使用'e.printStackTrace()'在你的'catch'塊中打印stacktrace。第三:閱讀[當'Runtime.exec()'不會](http://www.javaworld。COM /和javaworld/JW-12-2000/JW-1229-traps.html)。 – 2011-04-08 08:20:48

+0

你會得到什麼輸出?你必須閱讀輸出以防止它被阻塞,並可能試圖告訴你一個你忽略的錯誤消息。另外,不要忽略異常,以便將它們打印出來。 – 2011-04-08 08:21:47

+0

@Joachim @Peter:關於異常的點注意.. :)我編輯過的問題 – Sudh 2011-04-09 19:30:09

回答

1

我想我已經得到了答案......問題不在於與Java文件的源代碼......我才知道,我是用編譯AA.C的Turbo C編譯器生成一個16位的.exe文件(我不知道它是什麼意思)...但是我們的.getRuntime.exec()函數在普通模式下需要32位或更高的.exe。這是程序意外行爲的原因。

這是我當我試圖運行它在Eclipse之外的錯誤:

image included

當我試圖執行一個.EXE開發使用Visual Studio 2005 ....我能夠推出從應用程序exe。 感謝大家,但仍然有一個問題,如何運行16位exe文件。

2

使用ProcessBuilder代替。

示例代碼:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory(new File("myDir")); 
Process p = pb.start(); 
+0

也嘗試過,但結果也一樣.... – Sudh 2011-04-09 19:30:36

0

是什麼錯誤(S)說什麼?

這很可能是PATH環境是錯誤的,它無法找到它的依賴(就像它需要推出其他DLL)。有時進程將使用不同的機制來找出他們的路徑或環境所需要的。

如果你只是看到「錯誤」,那麼也許你可以打印出「E」,其中將包含您的異常,以及價值。您還應該打印出錯誤信息流,因爲這可能包含重要的線索。

+1

不會是%PATH%。他正在使用該命令的絕對路徑名。 – 2011-04-08 08:27:13

+0

沒有錯誤...它運行平穩,甚至調用notepad.exe,msword.exe完美的問題是隻有我創建的文件...(從命令提示符或雙擊時調用完美) – Sudh 2011-04-09 19:32:58