Библиотека классов Java представляет собой внешние процессы с использованием класса java.lang.Process
. Процессы могут быть созданы с помощью java.lang.ProcessBuilder
:
Process process = new ProcessBuilder("processname").start();
или более старого интерфейса, выставленного перегруженными exec
методами на java.lang.Runtime
class:
Process process = Runtime.getRuntime().exec("processname");
Оба эти фрагмента кода будут порождать новый процесс, который обычно выполняется асинхронно и может взаимодействовать через результирующий объект Process
. Если вам нужно проверить завершение процесса (или дождаться его завершения), не забудьте проверить, что значение выхода (код выхода), возвращаемое process.exitValue()
или process.waitFor()
как ожидалось (0 для большинства программ), поскольку исключение не возникает, если процесс выходит из строя.
Также обратите внимание, что для правильной обработки ввода-вывода процесса часто требуется дополнительный код , как описано в документации для класса Process
(выделено мной):
По умолчанию у созданного подпроцесса нет собственного терминала или консоли. Все его стандартные операции ввода-вывода (т. Е. Stdin, stdout, stderr) будут перенаправлены на родительский процесс, где к ним можно получить доступ через потоки, полученные с помощью методов getOutputStream (), getInputStream () и getErrorStream (). Родительский процесс использует эти потоки для подачи ввода и получения вывода из подпроцесса. Поскольку некоторые собственные платформы обеспечивают ограниченный размер буфера для стандартных потоков ввода и вывода, неспособность быстро записать поток ввода или прочитать выходной поток подпроцесса, может привести к блокировке подпроцесса или даже к взаимоблокировке.
Один из способов убедиться в правильности обработки ввода-вывода и о том, что значение выхода указывает, что успех заключается в использовании библиотеки, такой как
jproc
, которая связана с сложностями захвата stdout и stderr и предлагает простой синхронный интерфейс для запуска внешних процессов:ProcResult result = new ProcBuilder("processname").run();
jproc
доступен через maven central:
org.buildobjects jproc 2.2.0
Это не так, как вы используете аргумент OpenArgs
. OpenArgs
предназначен только для передачи строки в форму.
Вместо этого вы можете использовать коллекцию Forms
для установки источника записи:
DoCmd.OpenForm "FormX"
Forms!FormX.Recordsource = "tblA"