2016-12-30 50 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来修复它。