2016-04-27 51 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離開它當別人遇到這個問題。

相關問題