从Java应用程序执行任何.exe文件

时间:2011-04-08 08:16:35

标签: java development-environment exe

我有一个Java应用程序,用户可以在其中提供任何可执行文件(.exe),应用程序将在系统上运行它。像cmd.exe,notepad.exe或unix a.out等。

现在我经过大量例子后编写的代码似乎并不适用于用户创建的文件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打印的消息。)AA.exe根本不运行。其他一些观点:

  
      
  1. 它运行正常,没有抛出异常只有问题是输出   AA.exe在任何地方都不可见。
  2.   
  3. 它为进程p打印退出代码7 ...任何线索????
  4.   
  5. notepad.exe或MSWord.exe甚至TC.exe运行正常   通过此代码调用时。
  6.   

这是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;
}

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

我想我已经得到了答案......问题不在于Java文件的源代码......我了解到我用来编译AA.C的Turbo C编译器会生成一个16位的.exe文件(我不知道它意味着什么)...但我们的.getRuntime.exec()函数在正常模式下需要32位或更高的.exe这是程序意外行为的原因。

这是我在Eclipse外部运行时遇到的错误:

image included

当我尝试执行使用Visual Studio 2005开发的.exe时,我能够从应用程序启动exe。 感谢大家,但仍有一个问题,如何运行16位exe文件。

答案 2 :(得分:0)

错误是什么意思?

PATH环境很可能是错误的,它无法找到它的依赖项(就像它需要启动的其他DLL一样)。有时,流程将使用不同的机制来了解他们的路径或环境需要什么。

如果您只是看到'错误',那么也许您可以打印出包含您的例外的'e'的值。您还应该打印出您未执行的错误流,因为这可能包含重要线索。