2023-01-20 304
当我用javah中编译JNI类中的本机方法时,我只是有一个烦人的问题,以生成JNI标头文件.
如果类使用了第三方软件包,例如:org.opencv.core.mat,则javah将显示无法找到org.opencv.core.mat类的错误.
OPENCV示例代码如下:
package org.opencv.samples.fd;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
public class DetectionBasedTracker
{
public DetectionBasedTracker(String cascadeName, int minFaceSize) {
mNativeObj = nativeCreateObject(cascadeName, minFaceSize);
}
public void start() {
nativeStart(mNativeObj);
}
public void stop() {
nativeStop(mNativeObj);
}
public void setMinFaceSize(int size) {
nativeSetFaceSize(mNativeObj, size);
}
public void detect(Mat imageGray, MatOfRect faces) {
nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
}
public void release() {
nativeDestroyObject(mNativeObj);
mNativeObj = 0;
}
private long mNativeObj = 0;
private static native long nativeCreateObject(String cascadeName, int minFaceSize);
private static native void nativeDestroyObject(long thiz);
private static native void nativeStart(long thiz);
private static native void nativeStop(long thiz);
private static native void nativeSetFaceSize(long thiz, int size);
private static native void nativeDetect(long thiz, long inputImage, long faces);
}
首先,我使用了命令
javah -classpath bin/classes -bootclasspath (the directory of android.jar) -d jni (packageName + ClassName) , shows the error "can't find the org.opencv.core.Mat
然后我将命令修改为
javah - classpath bin/classes - bootclasspath (the dir of android.jar) ; (the dir of the opencv lib jar) -d jni ..." ", this time it shows error
例外
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class
name: E:\Computer_Language\Java\soft_android\OpenCV-2.4.3-rc-android-sdk\OpenCV
-2.4.3-rc-android-sdk\sdk\java\bin\opencv library - 2.4.3.jar
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
我认为,在-bootclasspath中添加OpenCV Lib的目录是有用的和必要的.错误是因为我只是在-bootclasspath中添加了两个路径,或者格式有问题?
真的很困惑.
请提供一些帮助,谢谢!
这就是我所做的:
1.开机命令行,输入(项目)/bin/class:
2.类型:javah -classpath(opencv4android sdk path)/java/bin/class :(您的项目位置)/bin/class -jni(您的Java类文件,包含本机库接口)
)
在我的项目中.我做到了:
javah -classpath/home/zijun/dev/adt/opencvandroid/sdk/java/bin/class:/home/home/zijun/workspace/lowctm/bin/class -jni com.brainport.loct.loctm.tmatchm.tmatching
在Linux Ubuntu上工作的12.04.02 64bit OS
我也遇到了同样的问题,它花了我半天.我只需将distectionbasedtracker.java复制到我的督中.查找org.opencv.core.mat.mat.copying mat.java&Matofrect.java到目录distectionbasedtracker.java的存在只是导致更多的Java类无法找到.我发现这个问题是由Java文件中的import * race引起的.我们很少在定义的本机方法中使用Java类.因此,我剪切了这些Java方法并得到了:
package cn.ntu.tonguefur.nativemethod;
public class DetectionBasedTracker{
private static native long nativeCreateObject(String cascadeName,int minFaceSize);
//Other native methods
private static native void nativeDetect(long thiz,long inputImage,long faces);
}
现在您可以自由使用javah命令生成.h
文件.此后,添加Java方法和您需要的导入软件包.
以上所述是小编给大家介绍的Android,用javah生成jni头文件,显示错误,不能找到org.opencv.core.Mat。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26128.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态