java - 如何在不需要完全重新启动浏览器的情况下替换 Java Applet 中加载的动态库?

标签 java java-native-interface shared-libraries

我正在编写一个自动更新的应用程序。第一次运行时,它会在客户端的计算机上安装 native 库,这样他们就不需要每次都下载它。当它检测到已安装库的版本低于新要求的最低版本时,它会下载并安装新版本。

问题是,在用户关闭并重新启动浏览器(不是选项卡,而是整个浏览器)之前,Java 实际上并未使用新库。这是我试图避免的事情 - 不过,如果用户需要刷新页面,或者关闭它并再次打开它,也没关系。

我尝试在每次小程序启动时将已安装的库复制到临时文件夹,然后总是加载该副本,但无济于事。这里有人做过这样的事吗?有什么好主意吗?操作系统为Linux、JDK 1.5、Firefox。

谢谢!

最佳答案

这正是此错误报告中描述的情况: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039 (报告说适用于Windows,但实际上是Java问题)

在 VM 终止之前,Java 代码无法卸载 native dll。一旦 dll 被加载,它就会在 JVM 的生命周期内一直存在,并且 VM 将确保它被加载一次且仅一次。

我认为您的方案可行的唯一方法是您是否可以在加载 dll 之前进行版本检查和更新。一旦使用,您就会被困住。

关于java - 如何在不需要完全重新启动浏览器的情况下替换 Java Applet 中加载的动态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233638/

相关文章:

java - 为 Elastic 构建 PreBuiltTransportClient 时出现 NoSuchMethodError

java - 无法加载以下字体

Java : Is there a tool to make code (in a 3rd party JAR) forward compatible (1. 4 - 1.6)

java - IntelliJ IDEA 2016.3.4 : Abnormal build process termination

c++ - 如何在 C++ 类中使用 JNI registerNatives?

java - 为什么我们不再需要在 Eclipse 中在类路径中设置带有 JNI 实现的库?

c++ - 交叉编译找不到动态链接库

java - 在 Java 应用程序中使用的 OpenCV JNI 库中的内存使用跟踪工具

linux - 如何将 libc.a 链接到 arm-linux 中的共享库中使用 arm-none-linux-gnueabi-gcc

c - 为什么构建.so文件涉及多个.c文件