На данный момент я просто создаю простую программу, используя JNI, чтобы общаться и учиться. Я решил, что использование Ant для строительства сделает его намного проще. Вот моя структура проекта:Ant javah NullPointerException
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 сообщения, которые я видел abo ut it (javah NullPointerException while using ANT in Eclipse Indigo & "Can't load javah" error in Eclipse). Я следовал за обоими советами. Я гарантировал, что JRE по умолчанию был JDK (jdk1.8.0_111), добавил tools.jar в записи домашнего мусора и изменил параметры запуска/отладки build.xml для работы в той же JRE, что и рабочая область. К сожалению, ни одна из этих вещей не помогла. Любая помощь будет принята с благодарностью, и если есть какая-либо другая информация, вам просто нужно сообщить мне.
Вы не реализовали метод getInt. Это преднамеренно? – Rao
@ Rao Да, это собственный метод, поэтому реализация будет в собственном коде (C/C++). – Stripies