Самый эффективный способ - вызвать ту же самую функцию, которая была зарегистрирована непосредственно с помощью addEventListener
.
Вы также можете инициировать поддельное событие с помощью CustomEvent
и co.
Наконец, некоторые элементы, такие как <input type="file">
, поддерживают метод .click()
.
Ваша проблема вызвана тем, что sudo выводит на поток ошибок. Это происходит:
blockquote>curlProc1 = Runtime.getRuntime().exec(command1);
- Ваша программа запускается sudo
- Поскольку sudo по умолчанию работает на базе терминалов, он выдает либо «sudo : no tty присутствует и не указывается запрошенная программа "или" Пароль: "по
stderr
blockquote>while ((outputString1 = curlIn1.readLine()) != null) {
- Ваша программа ждет ввода на
stdout
- Поскольку вы никогда не читаете stderr, sudo никогда не закончится, и, следовательно, sudo никогда не закроет stdout, поэтому ваша программа останется застрявшей
. Один быстрый способ исправить это с помощью конструктора процессов , у него есть полезная опция для объединения как
stderr
, так иstdout
в одном потоке, что означает, что вам нужен только один поток для чтения потока , и сохраняя ваш код простым.ProcessBuilder pb = new ProcessBuilder("sudo", "openvpn", "--config", "/etc/openvpn/configFile"); pb.redirectErrorStream(true); Process curlProc1 = pb.start(); ....
Поскольку есть вероятность, что sudo запросит пароль (, вы можете настроить его, чтобы попросить его вместо того, чтобы давать ошибку ), вы можете указать пароль, записав входной поток процесса после , получив приглашение пароля:
p.getOutputStream().write("correct battery horse staple\n".getBytes(STandardCharsets.UTF_8));