代码之家  ›  专栏  ›  技术社区  ›  SongDoHou

如何设置Java ProcessBuilder参数以在外部运行。java文件?

  •  0
  • SongDoHou  · 技术社区  · 8 年前

    我正在尝试使用 ProcessBuilder

    我想输入java文件的整个路径+文件名+ .Java语言 并编译它。

    输入示例: C:\Windows\test.java

    然后,我将输入存储到 String 变量 FILE_LOCATION 然后打电话 processbuilder 编译输入 .Java语言 文件

    这是我的代码:

     static String JAVA_FILE_LOCATION;
     static String command[] = {"javac", JAVA_FILE_LOCATION};
     ProcessBuilder processBuilder = new ProcessBuilder(command);
     Process process = processBuilder.start();
     process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start();
    

    但我不知道如何设置参数。

    process = new ProcessBuilder(new String[]{
    "java","-cp",A,B}).start();
    

    我应该如何设置该参数 (A, B) ?

    1 回复  |  直到 8 年前
        1
  •  1
  •   DodgyCodeException    8 年前

    为了回答你的确切问题,比如说,你的类在package中 com.yourcompany.yourproduct 你的班级档案在 /dir/to/your/classes/com/yourcompany/yourproduct/Yourclass.c‌​lass.

    然后 A = "/dir/to/your/classes" B = "com.yourcompany.yourproduct.Yourclass" .

    然而,有几件事需要注意。查看您的代码:

    static String JAVA_FILE_LOCATION;
    static String command[] = {"javac", JAVA_FILE_LOCATION};
    ProcessBuilder processBuilder = new ProcessBuilder(command);
    

    否。您需要将CD刻录到目录并 然后 javac . 最简单的方法是打电话 processBuilder.directory(new File("/dir/to/your/classes")) . 那么你需要付出 爪哇语 源文件的相对路径( "com/yourcompany/yourproduct/Yourclass.java" ).

    Process process = processBuilder.start();
    process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start();
    

    等待第一个进程完成编译后再尝试运行它!在上面两行之间插入 process.waitFor(); . 您可能还希望检查是否有任何错误,并且只有在第一个进程成功的情况下才运行第二个进程。

    process = new ProcessBuilder("java", "-cp", A, B).start(); .