使用Runtime.exec(…)从另一个Java程序执行一个Java程序

使用Runtime.exec(…)从另一个Java程序执行一个Java程序,java,process,runtime.exec,Java,Process,Runtime.exec,我想要执行的测试程序接受一个参数——一个文件名——并在新文件的顶部制作一个文件副本,该文件的行为“ThisaModifiedVersion.”。当我单独测试这个程序时,它工作并生成一个新文件 然后我编写了调用该文件的程序: public static void main(String[] args) { try { Process p = Runtime.getRuntime.exec("java Tester.java inputfilename.txt");

我想要执行的测试程序接受一个参数——一个文件名——并在新文件的顶部制作一个文件副本,该文件的行为“ThisaModifiedVersion.”。当我单独测试这个程序时,它工作并生成一个新文件

然后我编写了调用该文件的程序:

public static void main(String[] args) {
    try {
        Process p = Runtime.getRuntime.exec("java Tester.java inputfilename.txt");
        p.waitFor();
        System.out.println("Done");
    } catch(Exception e) {
        System.out.println("Error");
        System.exit(0);
    }
} 

上面的程序打印出“完成”,但它从未对我传入的文件进行过修改。然后我在另一个程序中放入一些println()。当我单独运行该程序时,它会打印出这些语句,但当我试图从上面的程序调用它时,它没有。如何修复此问题?

您必须先编译
.java
文件,然后再启动它:

编译(包含主方法的类):

发布:

java Tester inputfilename.txt

您必须先编译
.java
文件,然后再启动它:

编译(包含主方法的类):

发布:

java Tester inputfilename.txt
应该是:

"java Tester inputfilename.txt"
但请帮自己一个忙,阅读(并实施)所有的建议

这可能会解决其他问题。如果没有,则应提供更多关于故障原因的信息

然后忽略它引用的
exec
,并使用
ProcessBuilder
构建
流程。还可以将
字符串arg
分解为
字符串[]args
,以说明本身包含空格的参数

应该是:

"java Tester inputfilename.txt"
但请帮自己一个忙,阅读(并实施)所有的建议

这可能会解决其他问题。如果没有,则应提供更多关于故障原因的信息


然后忽略它引用的
exec
,并使用
ProcessBuilder
构建
流程。还可以将
String arg
分解为
String[]args
,以说明本身包含空格的参数。

Jari告诉了您为什么它通常不起作用。但是关于输出:您必须明确地读取从那里开始的程序生成的输出。再看看Jari告诉你的为什么它一般不起作用。但是关于输出:您必须明确地读取从那里开始的程序生成的输出。再看看我添加的行(在:Process p=Runtime.getRuntime.exec(“java Tester.java inputfilename.txt”);之前)行:Runtime.getRuntime().exec(“javac Tester.java”);然后运行程序。它仍然不起作用。我的语法错了吗?打开
cmd
,手动运行这个东西,告诉我你得到了什么错误。我得到的消息:线程“main”中的异常java.lang.NoClassDefFoundError:Tester/java导致:java.lang.ClassNotFoundException:Tester.java at java.net.URLClassLoader$1.run(URLClassLoader.java:202)java.net.URLClassLoader.findClass(URLClassLoader.java:190)java.lang.ClassLoader.loadClass(ClassLoader.java:306)sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)java.lang.ClassLoader.loadClass(ClassLoader.java:247)的java.security.security.AccessController.doPrivileged(本机方法)是另一个问题,检查此项或仅用谷歌搜索。
.NoClassDefFoundError:Tester/java
表示您在使用
java
命令时仍在添加
.java
扩展名!Jari在那之前一个小时建议你把它拿走!我添加了(在:Process p=Runtime.getRuntime.exec(“java Tester.java inputfilename.txt”);行之前)行:Runtime.getRuntime().exec(“javac Tester.java”);然后运行程序。它仍然不起作用。我的语法错了吗?打开
cmd
,手动运行这个东西,告诉我你得到了什么错误。我得到的消息:线程“main”中的异常java.lang.NoClassDefFoundError:Tester/java导致:java.lang.ClassNotFoundException:Tester.java at java.net.URLClassLoader$1.run(URLClassLoader.java:202)java.net.URLClassLoader.findClass(URLClassLoader.java:190)java.lang.ClassLoader.loadClass(ClassLoader.java:306)sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)java.lang.ClassLoader.loadClass(ClassLoader.java:247)的java.security.security.AccessController.doPrivileged(本机方法)是另一个问题,检查此项或仅用谷歌搜索。
.NoClassDefFoundError:Tester/java
表示您在使用
java
命令时仍在添加
.java
扩展名!Jari在那之前一个小时建议你把它拿走!