要控制只有一个类加载器加载该段代码,可以使用一个私有静态变量来记录是否已经加载过,然后在加载代码之前进行判断。

可以按照以下步骤进行修改:

  1. 添加一个私有静态变量'loaded'来记录是否已经加载过。
  2. 在静态代码块中,先判断'loaded'的值是否为'true',如果是则直接返回,表示已经加载过。
  3. 如果'loaded'的值为'false',表示还没有加载过,则依次加载所需的dll文件,并将'loaded'的值设置为'true',表示已经加载过。
  4. 最后可以添加一个异常处理,以防加载dll文件失败。

修改后的代码如下所示:

static {
    if (!loaded) {
        try {
            System.load("D:\syySdfHsm\msvcr110.dll");
            System.load("D:\syySdfHsm\libeay32.dll");
            System.load("D:\syySdfHsm\ssleay32.dll");
            System.load("D:\syySdfHsm\sdfapi_x64.dll");
            System.load("D:\syySdfHsm\syySdfHsm.dll");
            loaded = true;
        } catch (UnsatisfiedLinkError e) {
            System.err.println("Failed to load DLL files: " + e.getMessage());
        }
    }
}
private static boolean loaded = false;

这样修改后,当第一次加载该类时,会执行加载dll文件的代码;在之后再次加载该类时,由于'loaded'的值已经为'true',所以直接返回,不再重复加载dll文件。

Java代码加载DLL文件:确保只加载一次

原文地址: https://www.cveoy.top/t/topic/qqGK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录