我正在使用 Play Framework 2.1 编写一个使用 OpenCV (2.4.6) 库的 web 应用程序。我在编译 OpenCV 并获得最终的 .jar 时没有任何问题,但是在OpenCV的 Java/Scala 教程中有一句话让我担心:
注意对 的调用
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
。在使用任何本机 OpenCV 方法之前,每个 Java 进程必须只执行一次此命令。如果你不调用它,你会得到 UnsatisfiedLink 错误。如果您在加载 OpenCV 时尝试加载它,也会出现错误。
我知道 Play Framework 是多线程的,并且线程在请求之间被重用。loadLibrary
当产生每个单独的线程时,我有没有办法调用该函数?还是我误解了线程池的工作原理,我应该每个请求加载一次库?这里的正确方法是什么?
[编辑:] 我发现我可以将System.loadLibrary
代码放在全局配置类中,这将使所有线程共享库。该库不是线程安全的,所以我认为如果我这样做只是等待发生的意外......