Метод run () Java Compiler

Я нашел этот код онлайн о JavaCompiler

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null,
             "src/org/kodejava/example/tools/Hello.java");

И это говорит о compiler.run(null, null, null что эти три нуля по умолчанию System.in, System.out а также System.err соответственно. Но что на самом деле делают эти значения, поскольку я не могу найти API для них? Может кто-нибудь объяснить, пожалуйста?

3 ответа

Решение

Javadoc здесь.

int run (InputStream in, OutputStream out, OutputStream err, String... arguments)

Запустите инструмент с указанными каналами ввода / вывода и аргументами. По соглашению инструмент возвращает 0 для успеха и ненулевой для ошибок. Любая сгенерированная диагностика будет записана в какой-либо неопределенный формат.

Parameters:
    in - "standard" input; use System.in if null
    out - "standard" output; use System.out if null
    err - "standard" error; use System.err if null
    arguments - arguments to pass to the tool 
Returns:
    0 for success; nonzero otherwise

Что касается System.in, System.out и System.err, это глобальные потоки, которые (по умолчанию) подключаются к STDIN, STDERR и STDOUT. Эти три устанавливаются операционной системой при запуске JVM. Вы можете передать их в файлы, или они просто пишут (читают из) консоли.

В этом случае вы будете использовать параметры для проверки вывода компилятора из вашей программы (а не просто отправлять его пользователю). Вот тут и появляется "диагностика, записанная в каком-то неопределенном формате".

JavaCompiler - это javax.tools.JavaCompiler, и он реализует интерфейс javax.tools.Tool, см. Javadoc для метода javax.tools.Tool#run.

Вы можете указать свои собственные потоки вместо того, чтобы полагаться на стандартные системные потоки. Например, если вы хотите перенаправить вывод в какой-либо файл, вы можете создать поток вывода файла и перейти к вызову #run.

Другие вопросы по тегам