【发布时间】:2015-03-10 15:42:23
【问题描述】:
我正在尝试在我的 servlet 定义中加载一个带有静态块的 DLL,如下所示:
String ehrViewerExternalNativeLibs = "webapps" + pathSeparator +
"ehr-viewer" + pathSeparator +
"WEB-INF" + pathSeparator +
"classes" + pathSeparator +
"extlib";
try {
String catalinaHome = System.getProperty("catalina.home");
String defaultLibraryPath = System.getProperty("java.library.path");
String sharedLibraryPath = catalinaHome + pathSeparator + ehrViewerExternalNativeLibs;
if (catalinaHome != null) {
System.setProperty("java.library.path", defaultLibraryPath + ";" + sharedLibraryPath);
String curPath = System.getProperty("java.library.path");
logger.info(curPath);
System.loadLibrary("awj2k");
//System.load(sharedLibraryPath + "\\awj2k.dll");
Class.forName("com.aware.j2k.codec.engine.AwJ2k");
}
我不断收到这样的错误:
2015 年 3 月 10 日上午 11:17:27 org.apache.catalina.core.StandardWrapperValve 调用 严重:为 servlet ehrViewerServiceImpl 分配异常
java.lang.UnsatisfiedLinkError: java.library.path 中没有 awj2k 在 java.lang.ClassLoader.loadLibrary(未知来源) 在 java.lang.Runtime.loadLibrary0(未知来源) 在 java.lang.System.loadLibrary(未知来源) 在 com.softmedical.ehrviewer.server.EHRViewerServiceImpl.(EHRViewerServiceImpl.java:121)
库路径的输出是:
信息 | 2015-03-10 11:17:27,558 | - D:\Tomcat-7.0\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\ System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;;.;D:\Tomcat-7.0\webapps\ehr-viewer\WEB-INF\classes\extlib
文件夹extlib的内容是
awj2k.dll
如果我将 DLL 放在 D:\Tomcat-7.0\bin 中,它就可以正常工作。窗帘后面有什么黑暗咒语?为什么我可以从我想要的地方加载 DLL?我看到 java.library.path 设置正确,为什么它不起作用?
【问题讨论】:
标签: java tomcat loadlibrary