【问题标题】:Ant javah NullPointerExceptionAnt javah NullPointerException
【发布时间】:2016-12-30 01:26:45
【问题描述】:

目前,我只是使用 JNI 创建一个简单的程序来学习和学习。我认为使用 Ant 进行构建会更容易。这是我的项目结构:

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 Entries,并将 build.xml 运行/调试设置更改为在与工作区相同的 JRE 中运行。不幸的是,这些事情都没有帮助。任何帮助将不胜感激,如果您需要任何其他信息,请告诉我。

【问题讨论】:

  • 您没有实现getInt 方法。是故意的吗?
  • @Rao 是的,它是一个本地方法,所以实现将在本地代码(C/C++)中。

标签: java ant java-native-interface


【解决方案1】:

我发现了问题。即使我将其更改为使用 JDK 而不是 JRE,但由于某种原因它仍在使用 JRE。将项目的 Ant 构建器更改为使用单独的 JRE 并选择 JDK 修复它。

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2012-06-23
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多