2011-02-24 104 views
0

为什么我得到这个错误信息?为什么我得到这个错误java.lang.ClassNotFoundException?

Testcase: createIndexBatch_usingTheTestArchive(src.LireHandlerTest):  Caused an ERROR 
at/lux/imageanalysis/ColorLayoutImpl 
java.lang.NoClassDefFoundError: at/lux/imageanalysis/ColorLayoutImpl 
     at net.semanticmetadata.lire.impl.SimpleDocumentBuilder.createDocument(Unknown Source) 
     at net.semanticmetadata.lire.AbstractDocumentBuilder.createDocument(Unknown Source) 
     at backend.storage.LireHandler.createIndexBatch(LireHandler.java:49) 
     at backend.storage.LireHandler.createIndexBatch(LireHandler.java:57) 
     at src.LireHandlerTest.createIndexBatch_usingTheTestArchive(LireHandlerTest.java:56) 
Caused by: java.lang.ClassNotFoundException: at.lux.imageanalysis.ColorLayoutImpl 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

我想创建一个使用Lire创建的文档的Lucene索引。当我开始尝试使用文档生成器创建文档时,它会给我提供此错误消息。

输入PARAMATERS首轮: 文件路径: “test_archive”(这是一个图像档案) whereToStoreIndex “的test_index”(我要去的地方来存储索引) createNewIndex:真

由于该方法递归(请参阅if语句,检查它是否为目录),它会自动调用多次,但所有递归调用都使用createNewIndex = false。

下面是代码:

public static boolean createIndexBatch(String filepath, String whereToStoreIndex, boolean createNewIndex){ 
     DocumentBuilder docBldr = DocumentBuilderFactory.getDefaultDocumentBuilder(); 
     try{ 
      IndexWriter indexWriter = new IndexWriter(
                FSDirectory.open(new File(whereToStoreIndex)), 
                new SimpleAnalyzer(), 
                createNewIndex, 
                IndexWriter.MaxFieldLength.UNLIMITED 
                ); 
      File[] files = FileHandler.getFilesFromDirectory(filepath); 
      for(File f:files){ 
       if(f.isFile()){ 
        //Hopper over Thumbs.db filene... 
        if(!f.getName().equals("Thumbs.db")){ 
         //Creating the document that is going to be stored in the index 
         String name = f.getName(); 
         String path = f.getPath(); 
         FileInputStream stream = new FileInputStream(f); 
         Document doc = docBldr.createDocument(stream, f.getName()); 

         //Add document to the index 
         indexWriter.addDocument(doc); 
        } 
       }else if(f.isDirectory()){ 
        indexWriter.optimize(); 
        indexWriter.close(); 
        LireHandler.createIndexBatch(f.getPath(), whereToStoreIndex, false); 
       } 
      } 
      indexWriter.close(); 
     }catch(IOException e){ 
      System.out.print("IOException in createIndexBatch:\n"+e.getMessage()+"\n"); 
      return false; 
     } 

     return true; 
    } 

回答

0

这听起来像你缺少一个Java库。

我想你需要下载Caliph &埃米尔,这可能是由里尔间接使用。

http://www.semanticmetadata.net/download/

+0

谢谢!成功了!我错过了一个名为caliph-emir-cbir.jar的jar库。我只有lucene和里尔图书馆。 – 2011-02-24 16:40:11

+0

获取同样的错误,但不要哪些文件需要下载,我尝试了很多没有得到成功。 – 2014-12-02 10:42:12