未满足链接错误:opencv_java2411.dll已加载到glass fish中的另一个类加载器中
我正在使用opencv用java实现一个用于人脸识别的web应用程序。 当我运行人脸识别代码时,我会遇到如下错误未满足链接错误:opencv_java2411.dll已加载到glass fish中的另一个类加载器中,java,opencv,classloader,native,unsatisfiedlinkerror,Java,Opencv,Classloader,Native,Unsatisfiedlinkerror,我正在使用opencv用java实现一个用于人脸识别的web应用程序。 当我运行人脸识别代码时,我会遇到如下错误 java.lang.UnsatisfiedLinkError: Native Library F:\opencv\build\java\x86\opencv_java2411.dll already loaded in another classloader 我已经做了一些在internet上可用的方法,例如检查类是否已加载,将system.loadlibrary作为静态块添加到环
java.lang.UnsatisfiedLinkError: Native Library F:\opencv\build\java\x86\opencv_java2411.dll already loaded in another classloader
我已经做了一些在internet上可用的方法,例如检查类是否已加载,将system.loadlibrary作为静态块添加到环境变量的路径等,但在所有这些过程之后,错误仍然存在于系统中
does anyone has the solution for this problem i am able to run with this dll in desktop application but while running in web application the error comes
i am running this project using glassfish server on netbeans ide
public class FaceRecognition {
public static boolean loaded = false;
public void loadLib(){
System.out.println("loading library");
try {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}catch(Exception e){}
loaded = true;
}
public FaceRecognition() {
}
public void saveFaceRecognizedImage(File file){
try {
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector = new CascadeClassifier(facerecog.FaceRecognition.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
MatOfRect faceDetections = new MatOfRect();
BufferedImage bi = ImageIO.read(file);
Mat frame = bufferedImageToMat(bi);
Rect rectcrop = null;
faceDetector.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray()) {
System.out.println("ttt");
Core.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255,0));
rectcrop = new Rect(rect.x,rect.y,120,120);
}
try {
Mat imgrr = new Mat(frame,rectcrop);
Highgui.imwrite(file.getAbsolutePath(), imgrr);
// BufferedImage image = ImageIO.read(file);
// BufferedImage scaled = getScaledInstance(
// image, 120,120, RenderingHints.VALUE_INTERPOLATION_BILINEAR, true);
// writeJPG(scaled, new FileOutputStream(file.getAbsolutePath()), 0.85f);
}catch(Exception e){}
// Highgui.imencode(".bmp", frame, mem);
// Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
// BufferedImage buff = (BufferedImage) im;
// ImageIO.write(buff,"jpg",file);
} catch (IOException ex) {
Logger.getLogger(FaceRecognition.class.getName()).log(Level.SEVERE, null, ex);
}
}
根据:
每个类装入器管理自己的一组本机库相同
JNI本机库不能加载到多个类加载器中。
这样做会导致抛出UnsatifiedLinkError。例如
System.loadLibrary用于加载时抛出未满足的链接错误
本机库分为两个类加载器
在应用程序服务器中,应用程序的每个实例都使用一个新的类加载器,因此如果多个应用程序尝试加载同一个本机库,或者如果在不重新启动整个应用程序服务器的情况下重新启动单个应用程序,则会看到此错误。一些选择:
欢迎来到SO,你能把这个错误的代码片段贴在哪里吗?