Примечание: вы должны только использовать этот метод, когда вам абсолютно необходимо иметь терминал/консоль, например, что требуется виртуальному устройству. Для всех других целей перейдите к Runtime.exec().
У меня была такая же проблема. То, что я получил в работе использует Java Native Interface для вызова в небольшую функцию С, которая делает системный вызов:
SystemProcess.java:
class SystemProcess {
public native int systemCall(String cmd);
public boolean execute() { return systemCall("vim test") == 0; }
static { System.loadLibrary("SystemProcess"); }
}
SystemProcess.c
#include [javah-generated-header.h]
[javah-generated-function-prototype] (JNIEnv *env, jobject obj, jstring jcmd) {
jboolean iscopy;
const char *cmd = (*env)->GetStringUTFChars(env, jcmd, &iscopy);
jint ec = system(cmd);
(*env)->ReleaseStringUTFChars(env, jcmd, cmd);
return ec;
}
Я оставлю все, чтобы на самом деле сделать все генерацию заголовков и компиляцию c в общую библиотеку. Не стесняйтесь заменять систему fork/exec или posix_spawn, если вам становится лучше. Но по большей части это должно работать как на unix/linux.
Спасибо, но я надеялся запустить приложение на том же терминале. – notnoop
Это предполагает, что ваш Java-код имеет управляющий терминал и стандартные привязки дескрипторов 0, 1 и 2. –