从Java应用程序执行任何.exe文件
我有一个Java应用程序,用户可以在其中提供任何可执行文件(.exe),应用程序将在系统上运行它。如cmd.exe、notepad.exe或unix a.out等 现在,我在阅读了大量示例后编写的代码似乎对用户创建的文件notepad.exe不起作用,但使用TC++编写的文件和所有文件都不起作用。有人能指出错误的原因吗从Java应用程序执行任何.exe文件,java,development-environment,exe,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(){
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->Child thread exits运行它时[所有system.out消息都打印在控制台上,但要由.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;
}
#包括
#包括
#包括
#包括
内部主(空)
{
int i,j;
对于(j=0;j使用
示例代码:
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();
ProcessBuilder pb=newprocessbuilder(“myCommand”、“myArg1”、“myArg2”);
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
环境移除(“其他变量”);
环境put(“VAR2”,环境get(“VAR1”)+“后缀”);
目录(新文件(“myDir”);
进程p=pb.start();
改用
示例代码:
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();
ProcessBuilder pb=newprocessbuilder(“myCommand”、“myArg1”、“myArg2”);
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
环境移除(“其他变量”);
环境put(“VAR2”,环境get(“VAR1”)+“后缀”);
目录(新文件(“myDir”);
进程p=pb.start();
错误说明了什么
路径环境很可能是错误的,并且它找不到它的依赖项(就像它需要启动的其他DLL一样)。有时进程会使用不同的机制来找出它们的路径或环境需要是什么
如果你只是看到“error”,那么也许你可以打印出“e”的值,它也将包含你的异常。你还应该打印出错误流,你没有这样做,因为它可能包含重要的线索。错误说明了什么
路径环境很可能是错误的,并且它找不到它的依赖项(就像它需要启动的其他DLL一样)。有时进程会使用不同的机制来找出它们的路径或环境需要是什么
如果你只是看到“error”,那么也许你可以打印出“e”的值,它也会包含你的异常。你还应该打印出错误流,你没有这样做,因为这可能包含重要的线索。我想我已经得到了答案……问题不在于Java文件的源代码……我了解到Turbo C编译器我用来编译AA.C的er生成了一个16位的.exe文件(我还不知道它是什么意思)…但是我们的.getRuntime.exec()函数在正常模式下需要一个32位或更高的.exe,这是程序意外行为的原因
这是我在Eclipse之外运行它时遇到的错误:
当我尝试执行使用Visual Studio 2005开发的.exe时…我能够从应用程序启动该exe。
感谢大家,但还有一个问题仍然存在,那就是如何运行16位exe文件。我想我已经找到了答案…问题不在于Java文件的源代码…我了解到我用来编译AA.C的Turbo C编译器生成了一个16位的.exe文件(我还不知道它的意思)…但是我们的.getRuntime.exec()函数要求在正常模式下使用32位或更高的.exe,这是程序意外行为的原因
这是我在Eclipse之外运行它时遇到的错误:
当我尝试执行使用Visual Studio 2005开发的.exe时…我能够从应用程序启动该exe。
感谢大家,但还有一个问题,即如何运行16位exe文件。第一:定义“不工作”:它如何不工作。第二:至少使用e.printStackTrace()打印catch
-块中的stacktrace
.Third:阅读。你得到了什么输出?你必须阅读输出,以防止它阻塞,并可能试图告诉你你忽略了一个erorr表。另外,不要忽略异常最好打印出来。@Joachim@Peter:Point注意到了异常…:)我首先编辑了问题:定义“不起作用”:它是如何工作的。第二:至少使用e.printStackTrace()在catch
-块中打印stacktrace
.Third:阅读。你得到了什么输出?你必须阅读输出,以防止它阻塞,并可能试图告诉你你忽略了一个erorr表。另外,不要忽略异常最好打印出来。@Joachim@Peter:Point noted about exception.:)我编辑了这个问题,它不会是%PATH%。他使用的是一个绝对路径名命令。没有错误…它运行平稳,甚至可以完美地调用notepad.exe、msword.exe。问题只在于我创建的文件…(从命令提示符或双击调用时会完美执行)不会是%PATH%。他正在为命令使用绝对路径名。没有错误…它运行平稳,甚至可以完美地调用notepad.exe、msword.exe。问题只在于我创建的文件…(从命令提示符或双击调用时,会完美地执行)