Под "открытием приложения" вы подразумеваете запуск внешнего процесса или вызов библиотеки?
Если вы только запускаете исполняемый файл, вы можете использовать Runtime.getRuntime().exec
для запуска процесса и использовать возвращаемый дескриптор процесса, чтобы получить код возврата из процесса. Вы также можете зафиксировать вывод процесса с помощью getInputStream
из запущенного вами процесса.
Однако, если вы на самом деле вызываете процесс C, тогда да, JNI будет предпочтительным решением. Хорошее руководство по вызовам JNI для объекта Java можно найти здесь: http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html
Суть этого урока в следующем:
JNIEXPORT void JNICALL
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");
if (mid == 0)
return;
printf("In C, depth = %d, about to enter Java\n", depth);
(*env)->CallVoidMethod(env, obj, mid, depth);
printf("In C, depth = %d, back from Java\n", depth);
}
Короче говоря, из C вам нужно получить метод, прежде чем вы сможете его вызвать. Вы также можете использовать инструмент javap для генерации сигнатур методов, чтобы их можно было вызывать.