处理java.lang.VerifyError

处理java.lang.VerifyError,java,lucene,Java,Lucene,我在EclipseJuno中使用Lucene编写了一个Java程序。每当我尝试运行它时,它都会出现以下错误: Exception in thread "main" java.lang.VerifyError: Cannot inherit from final class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634)

我在EclipseJuno中使用Lucene编写了一个Java程序。每当我尝试运行它时,它都会出现以下错误:

Exception in thread "main" java.lang.VerifyError: Cannot inherit from final class

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at parser.BuildMainIndex.setUp(BuildMainIndex.java:339)
at parser.luceneDemo.main(luceneDemo.java:10)
错误的来源,即BuildManinIndex.java中的行是:

        doc.add(new IntField("startTime1",startTime1,Field.Store.YES));
这里startTime1是要编制索引的文档中的一个字段。我之前使用的是Lucene 3.6.0,现在使用的是Lucene 4.3.0。我没有从java.net.URL导入任何东西。我不知道这个错误的可能原因。请帮忙

编辑:下面是我写的简短程序

writer=new IndexWriter(directory,new StandardAnalyzer(Version.LUCENE_CURRENT),IndexWriter.MaxFieldLength.UNLIMITED);

Document doc=new Document();
doc.add(new Field("title","XYZ",Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("address","ABC Road",Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("city","Mumbai",Field.Store.YES,Field.Index.ANALYZED));
doc.add(new IntField("startTime1",900,Field.Store.YES));
doc.add(new IntField("finishTime1",1000,Field.Store.YES));
doc.add(new IntField("startTime2",9999,Field.Store.YES));
doc.add(new IntField("finishTime2",9999,Field.Store.YES));

writer.addDocument(doc);
writer.close();

错误消息有点混乱,因为您不是在继承
IntField
类,而是在创建它的实例,对吗

doc.add(new IntField("startTime1", startTime1, Field.Store.YES));
问题在该语句的第一部分
doc.add(..)
。 Lucene 3.6.0版和4.x版之间的
文档
类发生了变化。3.6版中的
添加(…)
接受
可字段
(),4.1.0版中的
可索引字段
()

VerifyError
上有用。或者

此外,Lucene 3.6.0中没有
IntField
,即该类来自ApacheSolr(),但Lucene 4.1.0中有一个。您可能正在使用与Lucene不同的3.6版本的
IntField
——请检查
import
语句和类路径

更新 Joy,对您来说,最简单的解决方案是从
/home/abhishek/mtp/stage-2/software/apache-tomcat-7.0.37/lib
中删除旧的Lucene JAR文件,并将新文件放在Eclipse中刷新项目

我给您的建议是切换到ApacheMaven进行依赖关系管理(Eclipse有一个Maven插件)。在Eclipse中,您创建一个“新的Maven项目”,并将依赖项添加到
pom.xml
文件-an。这样,您就不必将任何JAR文件复制到项目或Tomcat中


祝你好运。

错误消息有点混乱,因为你没有继承
IntField
类,你正在创建它的一个实例,对吗

doc.add(new IntField("startTime1", startTime1, Field.Store.YES));
问题在该语句的第一部分
doc.add(..)
。 Lucene 3.6.0版和4.x版之间的
文档
类发生了变化。3.6版中的
添加(…)
接受
可字段
(),4.1.0版中的
可索引字段
()

VerifyError
上有用。或者

此外,Lucene 3.6.0中没有
IntField
,即该类来自ApacheSolr(),但Lucene 4.1.0中有一个。您可能正在使用与Lucene不同的3.6版本的
IntField
——请检查
import
语句和类路径

更新 Joy,对您来说,最简单的解决方案是从
/home/abhishek/mtp/stage-2/software/apache-tomcat-7.0.37/lib
中删除旧的Lucene JAR文件,并将新文件放在Eclipse中刷新项目

我给您的建议是切换到ApacheMaven进行依赖关系管理(Eclipse有一个Maven插件)。在Eclipse中,您创建一个“新的Maven项目”,并将依赖项添加到
pom.xml
文件-an。这样,您就不必将任何JAR文件复制到项目或Tomcat中



祝你好运。

这看起来不会导致这个问题。你能用一个简短但完整的程序重现这个吗?你对Lucence 4.3.0从头开始重建了一切吗?好的,长官,我正在尝试。是的,长官。错误还在继续。现在我已经编写了一个简短的程序,只需在索引中添加一个文档。每当我发表评论时,这行错误就会消失。请发布一个简短但完整的程序,这样我们就可以自己复制它。不,请发布一个简短但完整的程序。任何人都可以复制、粘贴到新文件中、针对Lucene 4.3.0进行编译并运行它。这看起来不会导致问题。你能用一个简短但完整的程序重现这个吗?你对Lucence 4.3.0从头开始重建了一切吗?好的,长官,我正在尝试。是的,长官。错误还在继续。现在我已经编写了一个简短的程序,只需在索引中添加一个文档。每当我发表评论时,这行错误就会消失。请发布一个简短但完整的程序,这样我们就可以自己复制它。不,请发布一个简短但完整的程序。任何人都可以复制、粘贴到新文件中,根据Lucene 4.3.0编译并运行。我已经导入了Lucene 4.2.0,但作为动态Web项目的一部分,Lucene 3.6.0.jar包含在ApacheTomcat 7.0中。检查您的
import
语句以查看您导入的
IntField
,Solr(Lucene 3.6)一个或Lucene 4.0。使用两个不同版本的JAR不是一个好主意,因为您会遇到奇怪的类路径问题。但由于我将其作为动态Web项目的一部分编写,所以Tomcat7.0库中包含了Lucene 3.6.0。这是错误的原因吗?导入语句应该读
import org.apache.lucene.document.IntField。这会让错误消失。但两种不同的Lucene版本肯定是原因。你应该试着用4.1替换嵌入式3.6版本。是的,先生,我已经导入了声明。但实际上,我对开发web项目还不熟悉,这就是为什么我没有太多的想法去做的原因。您能帮我替换Tomcat库中包含的旧jar文件吗?我已经导入了Lucene 4.2.0,但由于我将其作为动态Web项目的一部分编写,Lucene 3.6.0.jar包含在Apache Tomcat 7.0中。请检查您的
import
语句以查看您导入的
IntField
,Solr(Lucene 3.6)一个或Lucene 4.0。使用两个不同版本的JAR不是一个好主意,因为您会遇到奇怪的类路径问题。但由于我将其作为动态Web项目的一部分编写,所以Tomcat7.0库中包含了Lucene 3.6.0。这是错误的原因吗?导入语句应为
import org.apache.luce