Java Glassfish java.lang.IllegalAccessError: tried to access method com.sun.jna.Pointer on glassfish 3.1.2.2
Java Glassfish java.lang.IllegalAccessError: tried to access method com.sun.jna.Pointer on glassfish 3.1.2.2
我遇到了严重的问题,我尝试了所有可能的想法,我也阅读了 Whosebug 上关于类似问题的答案,但对我没有用。
实际发生的是我在 glassfish 3.1.2.2
上部署应用程序。我正在使用 2 个罐子:jna.jar
和 platform.jar
(我尝试了不同的版本,最后我尝试的实际上是:jna-3.3.0.jar
和 jna-3.0.0-platform.jar
)我想做的是阅读 Windows 注册表项。我还从 jna.jar 调用其他方法(有趣的是,我不必在我的“.ear”文件内的 lib 目录中包含 jna.jar,这表明 - 它必须已经存在于 glassfish 的某处。当我在 glassfish 目录上搜索它时 - 我找不到它。)。无论如何 - 当我调用 jna.jar 的方法时 - 它工作得很好,当我调用 platform.jar 的方法时,首先我必须在我的 .ear 的 lib 目录中部署那个 platform.jar文件,其次 - 它永远不会工作 - 因为我得到:...
java.lang.IllegalAccessError: 试图从 class com.sun.jna.platform.win32.WinReg$HKEY[ 访问方法 com.sun.jna.Pointer.(J)V =35=]
我已经尝试了我能想到的任何事情:重建我的工作区,重命名 jar,将它们都包含在 .ear 文件的 lib 文件夹中,包括其中一个,根本不包含,包括 glassfish3\glassfish\domains\target\lib\ext
,包括 glassfish3\glassfish\domains\target\lib\ext
中的一个或另一个,尝试了这 2 个罐子的不同版本,但没有任何效果。我尝试使用 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 合并到 1 个罐子中,然后将其放入 glassfish3\glassfish\domains\target\lib 和 glassfish3\glassfish\domains\target\lib\ext 中(实际上我敢打赌将其放入 glassfish3\glassfish\domains\target\lib, 不过我没测试).
嗯,至少现在可以了!
如果对您有帮助,请投上一票。
我遇到了严重的问题,我尝试了所有可能的想法,我也阅读了 Whosebug 上关于类似问题的答案,但对我没有用。
实际发生的是我在 glassfish 3.1.2.2
上部署应用程序。我正在使用 2 个罐子:jna.jar
和 platform.jar
(我尝试了不同的版本,最后我尝试的实际上是:jna-3.3.0.jar
和 jna-3.0.0-platform.jar
)我想做的是阅读 Windows 注册表项。我还从 jna.jar 调用其他方法(有趣的是,我不必在我的“.ear”文件内的 lib 目录中包含 jna.jar,这表明 - 它必须已经存在于 glassfish 的某处。当我在 glassfish 目录上搜索它时 - 我找不到它。)。无论如何 - 当我调用 jna.jar 的方法时 - 它工作得很好,当我调用 platform.jar 的方法时,首先我必须在我的 .ear 的 lib 目录中部署那个 platform.jar文件,其次 - 它永远不会工作 - 因为我得到:...
java.lang.IllegalAccessError: 试图从 class com.sun.jna.platform.win32.WinReg$HKEY[ 访问方法 com.sun.jna.Pointer.(J)V =35=]
我已经尝试了我能想到的任何事情:重建我的工作区,重命名 jar,将它们都包含在 .ear 文件的 lib 文件夹中,包括其中一个,根本不包含,包括 glassfish3\glassfish\domains\target\lib\ext
,包括 glassfish3\glassfish\domains\target\lib\ext
中的一个或另一个,尝试了这 2 个罐子的不同版本,但没有任何效果。我尝试使用 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 合并到 1 个罐子中,然后将其放入 glassfish3\glassfish\domains\target\lib 和 glassfish3\glassfish\domains\target\lib\ext 中(实际上我敢打赌将其放入 glassfish3\glassfish\domains\target\lib, 不过我没测试).
嗯,至少现在可以了!
如果对您有帮助,请投上一票。