首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

linux上使用jni实现c++调用java程序(2)找不到java类的有关问题

2013-03-10 
linux下使用jni实现c++调用java程序(2)找不到java类的问题初用java和jni使用,很多地方出现错误,最恶心的错

linux下使用jni实现c++调用java程序(2)找不到java类的问题
初用java和jni使用,很多地方出现错误,最恶心的错误就是:A fatal error has been detected by the Java Runtime Environment.....或者是提示:find java class error!  
这是因为c++程序没有找到需要调用的java class文件。如果使用jni找不到java类的时候,一般问题出现在以下方面:(1)jclass cls = env->FindClass("tdb/queryTDB"); //设置java类路径,tdb文件夹下的queryTDB.class,注意类不要加.class(2)java文件中package有没有指定:package tdb;,如果指定了java文件中的路径是否都是加上了package的路径:String directory = "./tdb/CompProfileOntologyTDB";(3)还需要别的jar包,但没有在options(jvm启动参数)中设置!
下面主要介绍的是问题1和问题2,这两类问题一粗心就有可能造成package用于指定java文件所在的包,如果test.java指定了包:package tdb;,编译运行程序应该如下:[root@QAServer jena_query]# cd tdb/[root@QAServer tdb]# javac testTDB.java[root@QAServer tdb]# java testTDB
这时java文件的底层路径应该在java文件的上一层,也就是说:(1)java文件中的所有目录都应加上一个tdb/,才能找到所需路径:String directory = "tdb/CompProfileOntologyTDB" ;(2)java文件编译后,运行必须在java文件的上一层目录:java tdb/test,否则会提示找不到class;
如果test.java中没有指定包,则编译运行程序应该如下:[root@QAServer tdb]# javac testTDB.java[root@QAServer tdb]# cd ..[root@QAServer jena_query]# java tdb/testTDB
这时java文件的底层路径就在java文件所在层,也就是说:(1)java文件中的所有目录是不需要加tdb/的(2)运行class时必须就在java文件所在目录下
所以:在c++调用cpp所在文件夹里面的java程序时,例如linux上使用jni实现c++调用java程序(2)找不到java类的有关问题jenaQuery.cpp调用tdb文件夹中的queryTDB.class首先在queryTDB.java中指定package tdb;;然后在queryTDB.java文件中就可以不在用的路径的时候加上一个tdb/了;否则就会出现找不到class的错误! 

热点排行