【问题标题】:Dynamically loading a native library inside Java applet在 Java 小程序中动态加载本机库
【发布时间】:2009-03-13 15:32:35
【问题描述】:

我正在尝试编写一个从用户的串行端口读取的 Java 小程序。为此,我将Java Comm APIRXTX library 结合使用。我已经成功地通过本地 Java 应用程序读取数据,但我似乎无法从小程序中执行相同的操作。问题是 RXTX 库是一个本地库,我还没有找到在 Java 小程序中加载这个库的方法。我发现了两篇有趣的文章(使用 JNI in Applets 引用 this article),但两者都超过 10 年,我想知道是否有更新的解决方案。或者,如果您可以提出替代方案,我很乐意听到!

【问题讨论】:

    标签: java applet java-native-interface rxtx


    【解决方案1】:

    使用 Java Web Start。您可以将本机库作为签名的 jar 包含在内,一切都应该可以工作。

    1) 将原生库放入根目录下的 jar 中 2)签署所有的罐子 3)编写一个引用所有jar的JNLP(去搜索如何编写jnlp)

    之后它应该可以工作

    【讨论】:

      【解决方案2】:

      首先我建议在 Applet 中这样做可能是个坏主意。

      如果你还是继续,JNLPAppletLauncher 可能会有所帮助。

      【讨论】:

        【解决方案3】:

        我不知道小程序,除了它们被严重锁定。安全/访问机器资源等。

        如果您需要可在网络上部署的解决方案,您是否查看过 Java Web Start ?尤其看这个FAQ entry

        【讨论】:

          【解决方案4】:

          坦率地说,尝试从 Java 小程序访问设备是一个坏主意,即使您可以让它工作,而将动态库加载到传统小程序中是一个更糟糕的主意。事实上,如果你能找到一种方法来欺骗现代浏览器,我会感到惊讶。 (考虑可能的安全隐患。)

          按照其他问题的建议,您最好构建一个可以通过 Web Start 启动的应用程序。

          【讨论】:

          • 当前 Java 插件在浏览器进程之外运行小程序。这些巧妙地规避了 Vista 的“低完整性”安全限制。
          • 那么你是说 Vista 取消了小程序的沙箱化?这可能比加载 dll 更令人恐惧——它会违反 Java 安全策略并且是一个真正的坏主意。
          【解决方案5】:

          我也对这里的答案很感兴趣。我的建议是将 RXTX 的 .jar 和 .dll 安装到 \program files\java\ 树中。您可以在尝试使用小程序之前将它们安装在目标系统上。我喜欢使用 Java Web Start 的想法。如果你签署小程序,你不能在机器上读/写任何文件吗?所以你可以安装 .jar 和 .dll 然后再使用它们?

          对于windows,我建议使用“Windows Java Serial Com Port Driver”而不是rxtx。 你可以从http://www.engidea.com/blog/informatica/winjcom/winjcom.html下载 我发现它更容易安装和使用,而且没有错误。 我无法将 RXTX 与 USB 串行设备一起使用,因为拔下 USB 端口时 RXTX 会崩溃。 winjcom 为我解决了这些问题,等等。

          我仍在尝试决定如何部署 DLL,但我并不担心,因为我不希望“Windows Java Serial Com Port Driver”的 DLL 发生变化。 -斯托什

          【讨论】:

            猜你喜欢
            • 2014-07-05
            • 1970-01-01
            • 1970-01-01
            • 2017-09-20
            • 1970-01-01
            • 1970-01-01
            • 2011-01-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多