2013-02-13 2 views
2

Итак, я столкнулся с досадной небольшой проблемой между api для javax.tools.JavaCompiler и компилятором cmd (что то же самое!). Я просто хочу использовать аргумент javac как: * -d C: \ compiled \ C: \ programs \ HelloWorld.java *. Это отлично работает в командной строке cmd, но мой код не работает, говоря, что файл не существует.javax.tools.JavaCompiler "arguments" arg

public class Test { 

    private static String programsDir = "C:\\programs\\"; 
    private static String compiledDir = "C:\\compiled\\"; 
    private static String fileName = "HelloWorld.java"; 

    public static void main(String[] args){ 

     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

     String arguments = "-d " + compiledDir + " " + programsDir + fileName ; 
     compiler.run(System.in, System.out, System.err, arguments); 
    } 

Выход:

javac: file not found: -d C:\compiled\ C:\programs\HelloWorld.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 

Но я могу вырезать и вставить "-d C: \ скомпилирован \ C: \ Programs \ Helloworld.java" в JAVAC. То есть javac -d C: \ compiled \ C: programs \ HelloWorld.java работает.

+0

'C: programs' ->' '\' 'отсутствует по какой-то причине (ваш код показывает, что она есть)? – nhahtdh

+0

@nhahtdh Хотя он в коде - не уверен, что используется ;-) – assylias

+0

Извините, ребята, это была опечатка. Починил это. – Matt

ответ

2

run ожидает список аргументов, вы пробовали:

String[] args = {"-d", compiledDir, programsDir + fileName}; 
compiler.run(System.in, System.out, System.err, args); 
+1

Я думаю, что '-d' должен быть аргументом сам по себе (предполагая, что' run' ожидает список args - никогда ранее не использовал его). – nhahtdh

+0

Спасибо assylias. Это сработало, но после d в «-d» не может быть пробела, так как он не распознает флаг. – Matt

+0

@ Matt8541 Изменен - ​​Никогда не использовал его таким образом, чтобы быть честным. – assylias

Смежные вопросы