我有一个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根本不运行。其他一些观点:
- 它运行正常,没有抛出异常只有问题是输出 AA.exe在任何地方都不可见。
- 它为进程p打印退出代码7 ...任何线索????
- 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;
}
答案 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外部运行时遇到的错误:
当我尝试执行使用Visual Studio 2005开发的.exe时,我能够从应用程序启动exe。 感谢大家,但仍有一个问题,如何运行16位exe文件。
答案 2 :(得分:0)
错误是什么意思?
PATH环境很可能是错误的,它无法找到它的依赖项(就像它需要启动的其他DLL一样)。有时,流程将使用不同的机制来了解他们的路径或环境需要什么。
如果您只是看到'错误',那么也许您可以打印出包含您的例外的'e'的值。您还应该打印出您未执行的错误流,因为这可能包含重要线索。