有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

windows ProcessBuilder未正确执行Java类文件

在一个java文件中,我调用命令行语句来执行另一个java文件。这就是我正在做的:

List<String> paramsExecute = new ArrayList<String>();
paramsExecute.add("java");
paramsExecute.add("-cp");
paramsExecute.add("input\programs\User_K Program1");
paramsExecute.add("1 2 3");

ProcessBuilder builderExecute = new ProcessBuilder(paramsExecute);

builderExecute.redirectOutput(new File(a.txt));
builderExecute.redirectError(new File(b.txt));

其中一个Java文件的执行会产生b.txt,如下所示:

Error: Could not find or load main class 1 2 3

另一个java文件正在生成b.txt,如下所示:

Usage: java [-options] class [args...] ...

但是,当我直接从命令行运行这些语句时,它的执行是正确的。文件夹input\programs\src文件夹位于同一路径中。src文件夹包含包含ProcessBuilder程序的Java文件。我已经证实。类文件被正确地创建在正确的文件夹中。我正在windows中运行这个程序

感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    应该在“-cp”后面指定类路径,如

    List<String> params = new ArrayList<String>();
    params.add("java"); /* name of program to run, java */
    params.add("-cp");  /* -cp */
    params.add(System.getProperty("java.class.path")); /* class path information */
    params.add("pkg.to.yourclass.ClassToRun"); /* full quailified class name */
    params.add("1"); params.add("2"); params.add("3"); /* this is parameter to main */
    

    代码中的“input\programs\User_K Program1”被视为类路径信息,而不是要运行的类,因为它跟在“-cp”后面,“1 2 3”是类名,而不是传递给主方法的参数

    从scatch中检索类路径并不容易

    如果要使用位于示例src文件夹中的类创建进程,最好使用System.getProperty("java.class.path");继承类路径,或者手动键入路径信息

  2. # 2 楼答案

    这个paramsExecute.add("input\programs\User_K Program1");被视为单个命令/参数,表示类路径应该等于input\programs\User_K Program1

    我想你应该用更像

    paramsExecute.add("input\programs\User_K");
    paramsExecute.add("Program1");