2016-04-27 41 views
0

的C元素时成功我有一个程序,它具有Java代码,然后使用JNI接口的C代码,我试图去实现的任务是将一些使用C源文件的Java文件,然后使用JNI实现相同的程序,但包含C文件。因此我知道Java代码没有问题。在源文件中,我有一个叫做readMap()的函数,它导致了这个问题。当通过JNI读取文件时发生崩溃,但运行代码为

我已成功地将问题缩小到一个事实,即由于某种原因,C代码将无法读取地图,下面如果当功能是通过JNI调用时执行的语句:

if(in = fopen("../maps/example_map.txt", "r") == NULL) 
     { 
      printf("Error opening file\n"); 
      exit(-1); 
     } 

但是,如果我只从MainTest.c中的main()运行C代码,该函数将读取地图中的罚款和所有的C代码将工作,因此我排除了类路径错误的可能性。

我也缩小了JNI本身,因为其他函数将被调用并在调用时返回所需的结果,但如果调用readMap(),则不起作用。

基本上我想知道是否有其他人有类似的问题,以及他们的修复是什么或者如果任何人有任何想法可能是什么?

+1

'=='节拍'='。 – chux

+1

您需要了解[*运算符优先级*](http://en.cppreference.com/w/c/language/operator_precedence),因为表达式“in = fopen(...)== NULL”不会做你认为它的事情。 –

+0

你确定工作目录在两种情况下都是一样的吗?尝试使用绝对路径。 –

回答

0

为什么它没有在其他人的情况下工作的原因有这个问题,问题是类路径,类路径是相对的,所以它是从C文件的位置,但它需要是从那里的主要java文件是那里代码被执行的地方。

让我把Java代码保存在一个文件中,其中两个文件一个用于地图,另一个用于jni(C代码),因此使C工作的路径是“../maps/example_map.txt”,而对于java代码需要是“maps/example_map.txt”。

想法ID离开它当别人遇到这个问题。

相关问题