一分钟前工作的方法的java.lang.VerifyError

时间:2010-06-11 00:03:38

标签: java verifyerror

提前道歉,但我以前从未见过这个错误,也不知道要包括什么。我正在使用NetBeans并突然开始收到此错误:

Exception in thread "AWT-EventQueue-0" java.lang.VerifyError: (class: market/CostOperations, method: <init> signature: ()V) Constructor must call super() or this()
            at Bluebuild.Main.refreshTables(Main.java:748)
            at Bluebuild.Main.formComponentShown(Main.java:649)
            at Bluebuild.Main.access$100(Main.java:28)
            at Bluebuild.Main$2.componentShown(Main.java:374)
            at java.awt.Component.processComponentEvent(Component.java:6095)
            at java.awt.Component.processEvent(Component.java:6043)
            at java.awt.Container.processEvent(Container.java:2041)
            at java.awt.Window.processEvent(Window.java:1836)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

我不知道发生了什么。我甚至没有修改市场/ CostOperations。

这是构造函数:

public CostOperations() throws ParserConfigurationException, SAXException, IOException {

        //Open the xml file
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        f = new File(dbName);
        doc = builder.parse(f);
        System.out.println(f.canWrite());

        //Create the XPath
        XPathFactory xpfactory = XPathFactory.newInstance();
        path = xpfactory.newXPath();

    }

在调试模式下,我得到了这个:

debug:
Have no FileObject for C:\Program Files (x86)\Java\jdk1.6.0_20\jre\lib\sunrsasign.jar
Have no FileObject for C:\Program Files (x86)\Java\jdk1.6.0_20\jre\classes

我只需要知道导致错误的原因以及如何解决错误。谢谢!

7 个答案:

答案 0 :(得分:9)

VerifyError表示字节码无效,指向编译器问题。我会尝试重建一切,希望它消失,但否则你应该提交一个错误。字节码是通过invokenonvirtual superclass/<init>()V手动调用超类构造函数所必需的,但您不需要在源中添加super();,编译器应该处理

答案 1 :(得分:1)

我会严重怀疑这是一个Java编译器错误。像这样的东西很可能已被其他人注意到并报告为错误。但您可以通过重新编译文件并使用javap来反汇编字节码来验证这一点。在构造函数代码中查找以下指令:

    invokespecial #1 <Method java.lang.Object()>

我认为在编译器编写之后,某些东西更有可能修改字节码。可能性包括一些修改字节码以修改分析钩子的分析器,或一些注入依赖关系,切割点等的注释处理器。

答案 2 :(得分:1)

这绝对是一个编译器问题:生成的字节码具有不同的二进制格式。

解决这个问题: 右键单击项目 - &gt;属性 - &gt;来源 - &gt;来源/二进制格式

将其更改为适合您代码的任何格式。

答案 3 :(得分:0)

尝试在构造函数的开头添加super()作为错误状态。

我认为它通常是推断并添加而没有约束来编写它,也许CostOperations的超类没有任何空构造函数。

答案 4 :(得分:0)

已验证:编译器错误。

答案 5 :(得分:0)

Netbeans发生了这件事。在netbeans中,当您尝试在没有“重构副本”的同一目录中复制.java文件时,它会将新文件放置为“YourJavaFile_1.java”并出现问题。但是,如果您使用“重构副本”复制该文件,则没有问题。

它的名称为“YourJavaFile1.java”,但是有重构。

答案 6 :(得分:-2)

我认为它可能是由于类/构造函数访问说明符不匹配导致的。我刚刚解决了一个类似的问题,其中使用包访问说明符声明了类,但是它的构造函数被声明为public。

简单地使构造函数也有一个包访问说明符解决了这个问题。

class Ngram{

    public Ngram(String str, int count){
        ngram = str;
        freq = count;
    }

    String ngram;
    int freq;
}