JavaCV中的初始化错误例外
我试图使用JavaCV,但我得到了例外的初始化错误 以下是日志:JavaCV中的初始化错误例外,java,opencv,javacv,Java,Opencv,Javacv,我试图使用JavaCV,但我得到了例外的初始化错误 以下是日志: Exception in thread "Thread-2" java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.googlecode.javacpp.Loader.load(Loader.java:
Exception in thread "Thread-2" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.googlecode.javacpp.Loader.load(Loader.java:553)
at com.googlecode.javacpp.Loader.load(Loader.java:532)
at com.googlecode.javacv.cpp.opencv_core$CvArr.<clinit>(opencv_core.java:156)
at com.googlecode.javacv.VideoInputFrameGrabber.grab(VideoInputFrameGrabber.java:163)
at com.sudev.robo.Robot.run(Robot.java:30)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Can't overwrite cause
at java.lang.Throwable.initCause(Throwable.java:456)
at com.googlecode.javacpp.Loader.load(Loader.java:581)
at com.googlecode.javacpp.Loader.load(Loader.java:532)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:134)
... 8 more
对于那些在使用JavaCV并尝试加载相机时发现此错误的用户 我发现从下面的文件导入所有文件解决了我的问题
哪个类的初始值设定项引发错误?我们需要查看它的代码。嗨,Chrylis,我也添加了代码,谢谢,但这不是我们需要的类。异常是被抛出到一个类中,该类由opencv_core$CvArr的类初始值设定项而不是构造函数反射加载,我们需要看看它是什么类。我不熟悉OpenCV,所以我不知道它是从某个配置文件加载您的类,还是从它自己的内部类加载。将调试器设置为在ExceptionInInitializerError时中断,并查看Class.forName的参数。它是JavaCV jars的一部分,不是我创建的类。我只创建了一个类,并与您分享了这一点。在您找到传递给forName的类名之前,我们无法做任何其他事情。
import static com.googlecode.javacv.cpp.opencv_core.cvFlip;
import static com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.VideoInputFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
public class Robot implements Runnable {
IplImage image;
CanvasFrame canvas = new CanvasFrame("Web Cam");
public Robot() {
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
@Override
public void run() {
FrameGrabber grabber = new VideoInputFrameGrabber(0);
// 1 for next camera
int i = 0;
try {
grabber.start();
IplImage img = null;
while (true) {
long sleepTime= (long)((1000 / 60));
img = grabber.grab();
if (img != null) {
cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
cvSaveImage((i++) + "-aa.jpg", img); // show image on window
canvas.showImage(img);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Robot gs = new Robot();
Thread th = new Thread(gs);
th.start();
}
}