日期:2014-05-20  浏览次数:20554 次

如何写一个给 c 调用的java程序
如题

最好能给个例子,   最简单的就是如何   c调用java的helloword,   结果就是能在c的界面上显示helloword


------解决方案--------------------
java:
public class Sample2
{
public static int intMethod(int n)
{
return n * n;
}

public static boolean booleanMethod(boolean bool)
{
return !bool;
}
}


C:
----------------------------------------------
#include <jni.h>

#ifdef _WIN32
#define PATH_SEPARATOR '; '
#else
#define PATH_SEPARATOR ': '
#endif

int main()
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not;

options[0].optionString = "-Djava.class.path=. ";
memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 1;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

if (status != JNI_ERR)
{
cls = (*env)-> FindClass(env, "Sample2 ");
if(cls !=0)
{ mid = (*env)-> GetStaticMethodID(env, cls, "intMethod ", "(I)I ");
if(mid !=0)
{ square = (*env)-> CallStaticIntMethod(env, cls, mid, 5);
printf( "Result of intMethod: %d\n ", square);
}

mid = (*env)-> GetStaticMethodID(env, cls, "booleanMethod ", "(Z)Z ");
if(mid !=0)
{ not = (*env)-> CallStaticBooleanMethod(env, cls, mid, 1);
printf( "Result of booleanMethod: %d\n ", not);
}
}

(*jvm)-> DestroyJavaVM(jvm);
return 0;
}
else
return -1;
}