Java Can';我不明白为什么会发生阵列索引边界外性感觉。我怎样才能删除它?
我已经回顾了许多与我的主题相关的问题,因为我能够理解这个异常是如何发生的,但不理解为什么我正在执行的代码中会发生这个异常。下面的类接受两个参数:包含训练面的目录路径和要分类的图像路径。这实际上不是我的代码,它是由Petter Christian Bjelland编写的。。。下面是代码Java Can';我不明白为什么会发生阵列索引边界外性感觉。我怎样才能删除它?,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我已经回顾了许多与我的主题相关的问题,因为我能够理解这个异常是如何发生的,但不理解为什么我正在执行的代码中会发生这个异常。下面的类接受两个参数:包含训练面的目录路径和要分类的图像路径。这实际上不是我的代码,它是由Petter Christian Bjelland编写的。。。下面是代码 public class OpenCVFaceRecognizer { public static void main(String[] args) { String trainingDir
public class OpenCVFaceRecognizer {
public static void main(String[] args) {
String trainingDir = args[0];
Object testImage = Highgui.imread(args[1], 0);
File root = new File(trainingDir);
FilenameFilter imgFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
name = name.toLowerCase();
return name.endsWith(".jpg") || name.endsWith(".pgm") || name.endsWith(".png");
}
};
File[] imageFiles = root.listFiles(imgFilter);
MatVector images = new MatVector(imageFiles.length);
Mat labels = new Mat(imageFiles.length, 1, CV_32SC1);
IntBuffer labelsBuf = labels.createBuffer();
int counter = 0;
for (File image : imageFiles) {
Object img = Highgui.imread(image.getAbsolutePath(), 0);
int label = Integer.parseInt(image.getName().split("\\-")[0]);
images.put(counter, (Mat) img);
labelsBuf.put(counter, label);
counter++;
}
FaceRecognizer faceRecognizer = createFisherFaceRecognizer();
faceRecognizer.train(images, labels);
int predictedLabel = faceRecognizer.predict((Mat) testImage);
System.out.println("Predicted label: " + predictedLabel);
}
}
以下是完全例外
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at OpenCVFaceRecognizer.main(OpenCVFaceRecognizer.java:40)
这是第40行
字符串trainingDir=args[0]代码>嗯,在启动代码时,您需要实际传递这些参数
java OpenCVFaceRecognizer <pathToDirectory> <pathToImageToClassify>
java OpenCVFaceRecognizer
如果您使用的是Eclipse,那么有一种方法可以在运行代码时传递参数
查看另一个SO帖子:
由于ArrayIndexOutOfBoundsException位于主方法字符串参数,这意味着在运行应用程序时,您需要将字符串数组作为命令行参数传递。如果您使用的是任何编辑器,则需要在编辑器的运行配置中设置运行时参数
对于命令行java OpenCVFaceRecognizer
此代码需要命令行参数,由于您没有通过命令行参数,因此返回此错误
或从终端使用
java OpenCVFaceRecognizer <foldername> <imagePath>
java OpenCVFaceRecognizer
args数组保存的项目数量与通过命令行传递给main方法的项目数量相同。例如,如果您这样启动程序:
java OpenCVFaceRecognizer c:\data\images c:\data\tobeclassified.jpg
args将包含两个元素,“c:\data\images”和“c:\data\tobelclassified.jpg”。异常表示程序启动时根本没有命令行参数(因为0的索引已经超出了允许的索引范围,这是数组为空时的情况)。请参阅不要使用不存在的索引。您似乎没有任何要查找的命令行参数。就像程序参数trainingImages jon_doe_1.png中的这样??是的。您的程序需要两个参数。所以,若您使用的是IDE,那个么您可以按照所附的屏幕截图提供它,或者若您使用的是终端来运行,那个么使用第二种方法