Метод 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.