【问题标题】:Launching an ImageJ plugin from NetBeans throws a JNI error. Launching it from ImageJ alone works fine从 NetBeans 启动 ImageJ 插件会引发 JNI 错误。单独从 ImageJ 启动它可以正常工作
【发布时间】:2017-05-22 16:33:56
【问题描述】:

我有一个 ImageJ 插件及其需要 .dll 库才能运行的源代码。当我将其放入 ImageJ 插件文件夹时,该插件运行良好,没问题。

但是我必须修改源代码以添加新功能,所以我在 NetBeans 中打开了项目(它已经是一个 NetBean 项目)并尝试从 IDE 使用一个简单的测试类启动它,该测试类启动 ImageJ 并设置插件目录到项目 dist\ 目录。这适用于我的所有其他插件,但在这里我得到一个 UnsatisfiedLinkError。

在对 Dependency Walker 进行一些研究和使用后,我发现我在项目路径中遗漏了一些 .dll。现在我把它们都放在了正确的地方,用 -Djava.library.path="paths_to_all_my_libs" 执行,我仍然得到错误,找不到特定的过程。

这真的让我很困扰,因为我必须将 dist 中的 .jar 复制到我的 ImageJ 安装中,冒着把事情搞砸的风险,而且我不能使用控制台输出调试内容。另外,我不明白为什么我不能让它在 NetBeans 中工作,而仅使用 ImageJ 一切都很好。

非常欢迎任何想法!

【问题讨论】:

    标签: java netbeans java-native-interface imagej


    【解决方案1】:

    您可以在这里使用两种方法:

    1. 确保将您的 dll 位置添加到 PATH
    2. 如果您不关心位置(例如,您正在为自己开发一些东西),请使用 System.load 使用 dll 的确切位置 - 它以库的显式位置作为参数

    【讨论】:

    • 这实际上是我的问题。我的所有 dll 都在路径中(使用 -Djava.library.path 选项为我的项目设置了)但是有过程,我认为这是我的本机代码中的一个方法,当我无法加载时使用 System.load 或 System.loadLibrary。我什至尝试采用与我的工作 ImageJ 使用的完全相同的路径,但从 NetBeans 执行时它不起作用
    • 但是你也设置了PATH环境变量吗?尝试使用 System.load 加载库时出现什么错误?也许还有一些其他的 dll 丢失了?
    • 我检查了 PATH 变量,但它不包含我的 .dll 所在的目录。我无权修改它,也无权将 .dll 复制到 PATH 中的某个位置。使用 System.load 时遇到的错误是 Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\path_to_my_dll\Pylon64JNI-visual.dll: Specified procedure could not be found at java.lang.ClassLoader$NativeLibrary.load(Native Method) 我确保预先加载了 Pylon64JNI-visual 依赖的库(使用 DW 找到),方法是使用 System.loadLibrary 预先加载路径中的库,使用 System.load 加载其他库.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2016-05-14
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多