Runtime.exec не компилирует файл Java - PullRequest
0 голосов
/ 03 октября 2011

Я компилирую файл Java с помощью Runtime.exec ("javac MyFrog.java");Он не говорит об ошибках, ничего не выводит, но не создает файл MyFrog.class.если я напишу Runtime.exec («javac»), он выдаст вывод справочной информации.Я понимаю, что программа работает, но не создаю файл классов.Разрешения в порядке.

Ответы [ 5 ]

2 голосов
/ 03 октября 2011

javac -verbose должно дать вам гораздо больше информации, в частности, каталог, в котором создается файл.Поскольку вы можете распознать выводимый текст справки без каких-либо параметров, я предполагаю, что вы захватываете stderr процесса и предполагаете, что вы делаете то же самое и для stdout (хотя javac, похоже, ничего не пишет в stdout).

Где вы проверяете наличие файла .class?Он создается в том же каталоге, что и файл .java.Если MyFrog.java имеет объявление пакета, оно будет не создано в поддиректории пакета;для этого вы должны использовать -d аргумент.

0 голосов
/ 03 октября 2011

Я всегда нахожу , этот ресурс отвечает на все вопросы о Java exec.

0 голосов
/ 03 октября 2011

Попробуйте javac -verbose и убедитесь, что ваш classpath установлен правильно.

0 голосов
/ 03 октября 2011

Вы можете использовать метод ProcessBuilder или Runtime.exec () для создания нового процесса,

String []cmd={"javac","Foo.java"};

Process proc=Runtime.getRuntime().exec(cmd);
proc.waitFor();

Или используйте ProcessBuilder

ProcessBuilder pb =  new ProcessBuilder("javac.exe","-verbose", "Foo.java");

pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor();

InputStream inp=p.getInputStream();
int no=inp.read();
while(no!=-1)
{
 System.out.print((char)no);
 no=inp.read();
} 
0 голосов
/ 03 октября 2011

убедитесь, что MyFrog.java присутствует в рабочем каталоге

...