Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
http://www.rgagnon.com/javadetails/java-0014.html
import java.io.*;
public class CmdExec {
public static void main(String args[]) {
try {
String line;
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tree.com /A");
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
Вы можете получить локальный путь, используя свойства системы или аналогичный подход .
http://download.oracle.com/javase/tutorial/essential/environment/sysprop.html
Библиотека классов 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:<dependency> <groupId>org.buildobjects</groupId> <artifactId>jproc</artifactId> <version>2.2.0</version> </dependency>
Вот логика. предположим, что мы хотим запустить калькулятор в окнах с помощью java:
Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\\system32\\" + "calc.exe");
См. Runtime.exec()
и класс Process
. В простейшей форме:
Process myProcess = Runtime.getRuntime().exec(command);
...
Обратите внимание, что вам также необходимо прочитать вывод процесса (например: myProcess.getInputStream()
) - или процесс будет зависать на некоторых системах. Это может быть очень запутанным в первый раз и должно быть включено в любое введение в эти API. См. Ответ Джеймса П. для примера.
Вы также можете посмотреть в новый класс ProcessBuilder
, который упрощает изменение переменных среды и вызывает подпроцессы:
Process myProcess = new ProcessBuilder(command, arg).start();
...