【问题标题】:java.lang.VerifyError on method that worked a minute ago在一分钟前工作的方法上的 java.lang.VerifyError
【发布时间】:2011-03-02 10:55:17
【问题描述】:

提前致歉,但我以前从未见过此错误,也不知道要包括什么。我正在使用 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)

我不知道发生了什么。我什至没有修改 market/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

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

【问题讨论】:

  • 当您使用一些 java8 lambda 表达式时,有没有机会发生这种情况?

标签: java verifyerror


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    我认为更有可能是在编译器编写它们之后修改了字节码。可能性包括一些分析器正在修改字节码以注入分析钩子,或者一些注释处理器正在注入依赖项、切点等。

    【讨论】:

      【解决方案3】:

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

      要解决这个问题: 右键单击项目 -> 属性 -> 源 -> 源/二进制格式

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

      【讨论】:

        【解决方案4】:

        只需尝试将super() 放在构造函数的开头作为错误状态。

        我认为它通常是在没有约束的情况下推断和添加的,可能CostOperations的超类没有任何空构造函数..

        【讨论】:

        • CostOperations 没有超类。
        • @Travis 除了Object 之外的所有类都有一个超类;如果你没有指定一个它是Object
        • 对不起,我的意思是我没有指定一个。
        【解决方案5】:

        已验证:编译器错误。

        【讨论】:

        • 只是出于好奇。这是什么sdk?
        • 我严重怀疑这是一个编译器错误;看我的回答。
        【解决方案6】:

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

        它的名称为“YourJavaFile1.java”,但进行了重构。

        【讨论】:

          【解决方案7】:

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

          只需使构造函数也具有包访问说明符即可解决此问题。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-03
            • 2010-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-01
            相关资源
            最近更新 更多