使用JNI的NetBeans库

时间:2009-01-13 19:25:22

标签: netbeans java-native-interface

我可以定义一个在NetBeans中使用JNI的库吗?

似乎库定义只允许Jars或Folders。

如何在构建应用程序时确保DLL遵循jar文件?

3 个答案:

答案 0 :(得分:6)

假设您指的是构建NetBeans平台应用程序(或模块),那么您可以将DLL放在“release / modules / lib /”文件夹中。这是根据平台常见问题解答:

此处的其他信息:

如果你更普遍地询问,那么我认为大多数人将DLL封装在jar中,然后在应用程序启动时将其解压缩到临时位置。 e.g。

如果那不是你想要的,那么你需要提供更多关于你想要做什么的信息。

答案 1 :(得分:1)

netbeans不会自己做,但因为它在幕后使用了蚂蚁,所以有一种解决方法。

你应该在你的项目目录(jni)中创建一个名为c:\path\to\mynetbeansproject\jni的子目录,将所有的.dll,.so和.jnilib文件放在那里(本机的东西),并添加以下内容您在项目目录中找到的build.xml文件的行,就在</project>标记之前:

<target name="-post-compile">
    <copy todir="${dist.dir}/lib">
        <fileset dir="jni" />
    </copy>
</target>

然后像往常一样将jar文件添加到项目中。 :)

您在build.xml中插入的代码段将确保当您从netbeans(或dist/lib中调用“清理并构建”时,本机库会跟踪ant文件夹中的jar文件从命令行); jvm将在与加载它们的.jar相同的目录中查找.dll(.so,.jnilib)文件,因此它可以正常工作。

请注意,这不会使您的项目在netbeans中运行,因为...我不确定发生了什么,但看起来库路径(LD_LIBRARY_PATH)不包含您的项目'库,我无法从netbeans中更改它。只需将您的本机库放在mac {x}上的/Library/Java/Extensions中,或者只是将它们存放在Windows下的c:\windows\system32中。如果你运行64位jvm的64位窗口,我不知道;如果你正在运行linux,你可能知道在哪里藏匿它们,但/usr/lib/java可能是一个不错的选择。

答案 2 :(得分:1)

我在使用NetBeans 7.0.1时测试了以下解决方案并且它有效,但我不知道它是否也适用于早期版本。

解决方案很简单,可以按照NetBeans模块运行。因此,如果您有套件,请不要将其JNI文件放入套件项目中,而是将所需的JNI文件放入模块本身。做:

  1. 找到您想要(或需要或想到)放置JNI库的NetBeans模块项目(例如,扩展名为.DLL,.so和.jnilib;)
  2. 在Projects中,右键单击模块节点,单击Properties菜单;
  3. 在“项目属性”对话框中,单击“库”和“包装的JAR”。您必须在那里添加任何外部库。我添加了RxTX jar库。添加外部库后,Netbeans Ant脚本会在构建解决方案时将所有文件/文件夹从your_project_dir / release目录复制到正确的位置。
  4. 因此,将您的本机库放在 your_project_dir / release / lib 。如果需要,您可以为您需要的每个目标平台创建子目录,如: your_project_dir / release / lib / amd64 ,your_project_dir / release / lib / sparc32

    要了解更多,请阅读: http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#jni

    此致 marciowb.info