java用JNI调用C程序,此刻被启动的C程序能利用JNI调用java代码吗? java用JNI调用C程序,此刻被启动的C程序能利用JNI调用java代码吗?Code(java) -> Code(C) -> Code(java) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没明白你得意思jni (java native interface) 可以用c调用java也可以用java调用c 用JAVA调用C代码,但是这个被调用的C代码中也调用JAVA因为在编译过程中出错误,所以不确定这样的调用形式是否被JAVA支持。 这是可以的贴上你java调用c的代码和c的代码邦你看看不过个人认为这是没有必要的即时你要用jni技术也没有必要让其中的c代码再次调用java代码对你得移植性和维护性都不是很好一个java程序只有用到native方法(特殊平台提供的特殊interface)的时候才会去做jni 目前是想移植一个项目的C代码,但只是部分采用JAVA代码,所以出现了这种情况以下是一个例子程序,public class JavaMain{ System.loadLibrary("clib.dll"); public native void test(); public void javafunction(){ System.out.println("hello"); } public static void main(String[] args){ new JavaMain().test(); }}以上为java代码。调用clib.dll。JNIEXPORT void JNICALL java_test(JNIEnv * env, jobject obj){ startThread();}void startThread(){ jclass class_JavaMain; jmethodID javafunc; int returnvalue = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); class_javaMain = (*env)->FindClass(env, "JavaMain"); javafunc = (*env)->GetMethodId(env,..); (*env)->CallMethod("javafunction",...);}以上为C代码。编译成clib.dll。并且clib.dll会随时调用JavaMain的方法。程序由JavaMain开始运行,调用c编写的动态库,在c动态库中运行的代码会随时回调类JavaMain中的方法。编译都没问题,但把LOG打印出来后,发现startThread()中的 returnvalue 值是-1,表示JNI_CreateJavaVM的返回结果是错误,并没有成功创建虚拟机。 startThread() 是另外一个模块的函数,在内部需要自己创建一个新的JNI_CreateJavaVM,不能使用java_test(JNIEnv * env, jobject obj)中传入的JNIEnv * env to zt9788(zt)你有办法解决这个问题吗? 看看在C中的PATH中,是否有 JAVA的执行路径。 > 看看在C中的PATH中,是否有 JAVA的执行路径。没问题,C中有JAVA的路径不知道这样的调用方式是否被JNI支持? IO流 FileWriter问题,求救神仙!!!!!! 超级硬盘数据恢复软件(superrecoery)”的注册码 一个小问题...请各位来解答... 为什么捕获异常后 finally代码块后 的代码还会执行? 把以前比试的几个饶口的题拿出来共享 初学者编写的链表程序编译通过了,运行时老报错误(望达人求助一下,谢了) 在java语言中嵌入sql的问题,希望大家帮帮忙,谢谢了 关于一个UDP的问题!!! 如何在solaris上产生unicode的文本? 怎样设置自定义r g b的背景色 setBackground()? 没看懂的函数功能!大家帮忙看看 关于显示位置的一个问题。
jni (java native interface)
可以用c调用java
也可以用java调用c
因为在编译过程中出错误,所以不确定这样的调用形式是否被JAVA支持。
和c的代码
邦你看看不过个人认为这是没有必要的
即时你要用jni技术也没有必要让其中的c代码再次调用java代码
对你得移植性和维护性都不是很好
一个java程序只有用到native方法(特殊平台提供的特殊interface)的时候才会去做jni
以下是一个例子程序,public class JavaMain{
System.loadLibrary("clib.dll"); public native void test(); public void javafunction(){
System.out.println("hello");
} public static void main(String[] args){
new JavaMain().test();
}
}
以上为java代码。调用clib.dll。JNIEXPORT void JNICALL java_test(JNIEnv * env, jobject obj)
{
startThread();
}void startThread()
{
jclass class_JavaMain;
jmethodID javafunc;
int returnvalue = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
class_javaMain = (*env)->FindClass(env, "JavaMain");
javafunc = (*env)->GetMethodId(env,..);
(*env)->CallMethod("javafunction",...);
}
以上为C代码。编译成clib.dll。并且clib.dll会随时调用JavaMain的方法。程序由JavaMain开始运行,调用c编写的动态库,在c动态库中运行的代码会随时回调类JavaMain中的方法。编译都没问题,但把LOG打印出来后,发现startThread()中的 returnvalue 值是-1,表示JNI_CreateJavaVM的返回结果是错误,并没有成功创建虚拟机。
你有办法解决这个问题吗?
没问题,C中有JAVA的路径不知道这样的调用方式是否被JNI支持?