java.lang.VerifyError для метода, который работал минуту назад - PullRequest
7 голосов
/ 11 июня 2010

Извиняюсь заранее, но я никогда не видел эту ошибку раньше и не знаю, что включить.Я использую 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

Мне просто нужнознать, что вызывает ошибку и как ее исправить.Спасибо!

Ответы [ 7 ]

9 голосов
/ 11 июня 2010

A VerifyError означает, что байт-код недействителен, что указывает на проблему с компилятором.Я бы попробовал перестроить все в надежде, что это исчезнет, ​​но в противном случае вы должны сообщить об ошибке.Байт-код требуется для вызова конструктора суперкласса вручную через invokenonvirtual superclass/<init>()V, но вам не нужно добавлять super(); в исходный код, компилятор должен обработать это

1 голос
/ 05 ноября 2012

Это определенно проблема компилятора: сгенерированный байт-код имеет другой двоичный формат.

Чтобы решить это: Щелкните правой кнопкой мыши по проекту -> Свойства -> Источники -> Исходный / двоичный формат

Измените его на любой формат, подходящий для вашего кода.

1 голос
/ 11 июня 2010

Я бы серьезно усомнился, что это ошибка компилятора Java. Нечто подобное, скорее всего, было бы замечено кем-то другим и сообщено как ошибка. Но вы можете убедиться в этом, перекомпилировав файл и используя javap, чтобы разобрать байт-коды. Найдите следующую инструкцию в коде конструктора:

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

Я думаю, что более вероятно, что что-то модифицирует байт-коды после , когда их написал компилятор. Возможности включают в себя некоторые профилировщик, который модифицирует байт-коды для внедрения хуков профилирования, или некоторый процессор аннотаций, который вводит зависимости, точки вырезания и т. Д.

0 голосов
/ 07 ноября 2013

Это случилось со мной в Netbeans.В NetBeans, когда вы пытаетесь скопировать файл .java в тот же каталог без «копии рефактора», он помещает новый файл как «YourJavaFile_1.java» и возникает проблема.Но если вы скопируете этот файл с «копией рефакторинга», проблем не будет.

Это дает имя как "YourJavaFile1.java", но с рефакторингом.

0 голосов
/ 29 апреля 2013

Я полагаю, это может быть вызвано несоответствием спецификатора доступа класса / конструктора.Я только что решил аналогичную проблему, когда класс был объявлен с помощью спецификатора доступа к пакету, но его конструктор был объявлен общедоступным.

Простое назначение конструктору также спецификатора доступа к пакету решило проблему.

class Ngram{

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

    String ngram;
    int freq;
}
0 голосов
/ 11 июня 2010

Проверено: Ошибка компилятора.

0 голосов
/ 11 июня 2010

Просто попробуйте поместить super() в начало вашего конструктора, поскольку состояние ошибки.

Я думал, что это обычно выводится и добавляется без ограничения, чтобы написать его, может быть, суперкласс CostOperations не делаетнет пустого конструктора ..

...