【问题标题】:Java Glassfish java.lang.IllegalAccessError: tried to access method com.sun.jna.Pointer on glassfish 3.1.2.2Java Glassfish java.lang.IllegalAccessError:试图访问 glassfish 3.1.2.2 上的方法 com.sun.jna.Pointer
【发布时间】:2015-12-07 23:57:19
【问题描述】:

我有严重的问题,我已经尝试了所有可能的想法,我也阅读了关于类似问题的 stackoverflow 上的答案,这对我没有用。

实际发生的是我在glassfish 3.1.2.2 上部署应用程序。我正在使用 2 个罐子:jna.jarplatform.jar(我尝试了不同的版本,最后我尝试的是:jna-3.3.0.jarjna-3.0.0-platform.jar)我想要的是读取 Windows 注册表项。我还从 jna.jar 调用其他方法(有趣的是,我不必将 jna.jar 包含在我的“.ear”文件内的 lib 目录中,这表明 - 它必须已经存在于 glassfish 的某个地方。当我搜索它在 glassfish 目录上 - 我找不到它。)。无论如何 - 当我调用 jna.jar 的方法时 - 它工作得很好,当我调用 platform.jar 的方法时,首先我必须将该 platform.jar 部署在我的 .ear 文件的 lib 目录中,其次 - 它永远不会有效 - 因为我得到:...

java.lang.IllegalAccessError: 试图从类 com.sun.jna.platform.win32.WinReg$HKEY 访问方法 com.sun.jna.Pointer.(J)V

我已经尝试了我能想到的任何事情:重建我的工作区,重命名 jar,包括它们都在 .ear 文件的 lib 文件夹中,包括其中一个,根本不包括,包括 glassfish3\glassfish\domains\target\lib\ext 中的那些 jar,包括glassfish3\glassfish\domains\target\lib\ext 中的一个或另一个,尝试这两个罐子的不同版本,没有任何效果。我尝试使用 jni4j.jar 代替 jna.jar 和 platform.jar,仍然没有帮助。

这是实际代码,使用 jna.jar 和 platform.jar:

    if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\CitySyncSafety")) {
        path = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\CitySyncSafety", "Path") + File.separator + "DetectEngine";
        logger.warning("POJO path is: " + path);
    } else {
        path = "";
        logger.warning("Else POJO path is: " + path);
    }
    String libPath = System.getProperty("java.library.path");
    if (path != null && !path.equalsIgnoreCase("") && !libPath.contains(path)) {
        logger.warning("Library paths are: " + libPath);
        System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + path);
    }
    if (path != null) {
        //System.loadLibrary(path + File.separator + "cutilityProj1.dll");
    }

它导致了所说的非法访问异常。当我尝试将 jni4j.jar 与以下代码一起使用时,我没有得到任何异常,因为我什么都没有得到:

    try {
        Reg reg = new Reg("HKEY_LOCAL_MACHINE\\SOFTWARE");
        Reg.Key cp = reg.get("HKEY_LOCAL_MACHINE\\SOFTWARE");
        Reg.Key sound = cp.getChild("CitySyncSafety");
        String p = sound.get("Path");
        path = p  + File.separator + "DetectEngine";;
    } catch (IOException e) {
        if (path == null) {
            path = "";
        }
    }

它只是永远挂在第一行。请注意,我已确保确实存在适当的密钥和目录,因此我们可以排除此问题。我将感谢任何帮助,因为我已经在这个问题上花费了 2 天时间。

【问题讨论】:

    标签: java jar glassfish dependencies jna


    【解决方案1】:

    这是解决方案:)。我不知道是否所有步骤都是必要的(我的意思是,我可以,但我现在不能在工作时被打扰)。只需将 jna.jar 和 platform.jar 合并到 1 个 jar 中,然后将其放在 glassfish3\glassfish\domains\target\lib 和 glassfish3\glassfish\domains\target\lib\ext 中(实际上我敢打赌这足以放在 glassfish3\glassfish\domains\target\lib 中,但我没有测试)。

    嗯,至少现在可以了!

    如果对你有帮助,请投票。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2019-05-21
      相关资源
      最近更新 更多