Java Glassfish Java.lang.IllegalAccessError:尝试访问Glassfish 3.1.2.2上的com.sun.jna.Pointer方法

Java Glassfish Java.lang.IllegalAccessError:尝试访问Glassfish 3.1.2.2上的com.sun.jna.Pointer方法,java,jar,glassfish,dependencies,jna,Java,Jar,Glassfish,Dependencies,Jna,我有一个严重的问题,我已经尝试了所有可能的想法,我也读过关于stackoverflow的答案,关于类似的问题,我没有用 实际情况是,我正在glassfish 3.1.2.2上部署应用程序。我正在使用两个jar:jna.jar和platform.jar(我尝试了不同的版本,最后一次尝试的是:jna-3.3.0.jar和jna-3.0.0-platform.jar)我尝试的是读取Windows注册表项。我还从jna.jar调用了其他方法(有趣的是,我不必将jna.jar包含在我的lib目录中的“.e

我有一个严重的问题,我已经尝试了所有可能的想法,我也读过关于stackoverflow的答案,关于类似的问题,我没有用

实际情况是,我正在
glassfish 3.1.2.2
上部署应用程序。我正在使用两个jar:
jna.jar
platform.jar
(我尝试了不同的版本,最后一次尝试的是:
jna-3.3.0.jar
jna-3.0.0-platform.jar
)我尝试的是读取Windows注册表项。我还从jna.jar调用了其他方法(有趣的是,我不必将jna.jar包含在我的lib目录中的“.ear”文件中,这表明-它必须在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文件夹中的两个JAR,包括其中一个,根本不包括,包括
glassfish3\glassfish\domains\target\lib\ext
中的那些JAR,包括
glassfish3\glassfish\domains\target\lib\ext
中的一个或另一个,尝试这两个jar的不同版本,但没有任何效果。我尝试使用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天的时间在这个问题上。

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

好吧,至少现在它起作用了

如果它对你有帮助,请投赞成票