Команда работает через командную строку, но не при использовании ProcessBuilder - PullRequest
0 голосов
/ 02 декабря 2018

Я пишу программу, которая включает функцию, в которой пользователь может вводить код Java в текстовое поле и иметь возможность компилировать и запускать его.Я получаю сообщение об ошибке: enter image description here

Два каталога, показанные вверху, верны, и команда работает, когда я делаю это вручную через командную строку из того же рабочего каталога.Я использую Windows 10, а также вот код:

public Process compile() throws IOException {
    save(); //saves changes to source file
    System.out.println(file.getCanonicalPath());
    ProcessBuilder processBuilder = new ProcessBuilder("javac", file.getCanonicalPath());
    processBuilder.directory(new File(settingsFile.getJdkPath()));
    System.out.println(processBuilder.directory());
    Process process = processBuilder.start(); //Throws exception
    this.compiledFile = new File(file.getParentFile(), file.getName().replace(".java", ".class"));
    return process;
}

Файл для компиляции: enter image description here

Рабочий каталог: enter image description here

1 Ответ

0 голосов
/ 02 декабря 2018

Используя этот код, я смог скомпилировать файл Test.java в файл Test.class на рабочем столе.

import java.io.IOException;

public class App {

    public static Process compile() throws IOException {

        String myFilePath = "C:\\Users\\redacted\\Desktop\\Test.java";
        String javacPath = "C:\\Program Files\\Java\\jdk1.8.0_171\\bin\\javac.exe";

        ProcessBuilder processBuilder = new ProcessBuilder(javacPath, myFilePath);

        return processBuilder.start();
    }

    public static void main(String[] args) throws IOException {

        Process process = compile();

    }
}

Capture

Использование String javacPath = "javac.exe"; также работает, но это может быть связано с тем, что моя корзина JDK находится в моей переменной PATH.

Что-то не так с вашими путями или разрешениями в вызове конструктора ProcessBuilder.

...