【问题标题】:Executing one Java program from another using Runtime.exec(...)使用 Runtime.exec(...) 从另一个 Java 程序执行一个 Java 程序
【发布时间】:2014-03-23 18:59:11
【问题描述】:

我想要执行的测试程序接受一个参数——一个文件名——并使用“这是一个修改后的版本”行来制作文件的副本。在新文件的顶部。当我单独测试这个程序时,它可以工作并生成一个新文件。

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

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()。当我单独运行该程序时,它会打印出这些语句,但是当我尝试从上面的程序中调用它时,它没有。我该如何解决这个问题?

【问题讨论】:

  • Jari 告诉你为什么它不能正常工作。但关于输出:您必须明确读取由您从那里启动的程序生成的输出。另请看stackoverflow.com/a/21904185

标签: java process runtime.exec


【解决方案1】:

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

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

javac Tester.java

发射:

java Tester inputfilename.txt

【讨论】:

  • 我添加了(在行之前: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.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun .misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
  • 好吧,这是一个不同的问题,请查看stackoverflow.com/questions/6334148/… 或直接在谷歌上搜索。
  • .NoClassDefFoundError: Tester/java 表示您在使用java 命令时仍在添加.java 扩展! Jari 在此之前大约一小时建议您删除它!
【解决方案2】:
"java Tester.java inputfilename.txt"

应该是:

"java Tester inputfilename.txt"

但请帮自己一个忙,阅读(并实施)所有When Runtime.exec() won't 的建议。

这可能会解决其他问题。如果不是,它应该提供更多关于失败原因的信息。

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

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    相关资源
    最近更新 更多