2016-12-30 53 views
0

現在,我只是創建一個簡單的程序使用JNI來搞砸和學習。我認爲使用Ant來建設會讓它容易得多。這裏是我的項目結構:螞蟻javah空指針異常

src/pkg/Test.java 
bin/pkg/Test.class 
c/ 
build.xml 

Test.java:

package pkg; 

public class Test { 

    public static void main(String[] args) { 
     System.out.println(new Test().getInt()); 
    } 

    public native int getInt(); 

} 

的build.xml:

<project name="Test" basedir="." default="main"> 
    <property name="src.dir" value="src"/> 
    <property name="bin.dir" value="bin"/> 

    <target name="clean"> 
     <delete dir="${bin.dir}"/> 
    </target> 

    <target name="compile" depends="clean"> 
     <mkdir dir="${bin.dir}"/> 
     <javac srcdir="${src.dir}" destdir="${bin.dir}" includeantruntime="false"/> 
    </target> 

    <target name="build-c" depends="compile"> 
     <javah outputFile="test.h" classpath="${bin.dir}" class="pkg.Test"/> 
    </target> 

    <target name="main" depends="build-c"/> 
</project> 

例外:

build-c: 
     [javah] Exception in thread "main" java.lang.NullPointerException 
     [javah] at com.sun.tools.javah.JavahTask.run(JavahTask.java:503) 
     [javah] at com.sun.tools.javah.JavahTask.run(JavahTask.java:329) 
     [javah] at com.sun.tools.javah.Main.main(Main.java:46) 

我試圖尋找起來異常在線,並有2個帖子,我看到阿博(javah NullPointerException while using ANT in Eclipse Indigo & "Can't load javah" error in Eclipse)。我遵循了這些帖子中的兩條建議。我確保默認的JRE是JDK(jdk1.8.0_111),將tools.jar添加到Ant Home條目中,並將build.xml運行/調試設置更改爲與工作空間在相同的JRE中運行。這些事情都不利於我們。任何幫助將不勝感激,如果有任何其他信息,你需要讓我知道。

+0

你沒有實現'getInt'方法。它是故意的嗎? – Rao

+0

@Rao是的,這是一個本地方法,所以實現將在本機代碼(C/C++)中進行。 – Stripies

回答

0

我發現了這個問題。儘管我將其更改爲使用JDK而不是JRE,但出於某種原因仍然使用JRE。將項目的Ant構建器更改爲使用單獨的JRE並選擇一個JDK來修復它。