java.lang.veryixeRror на методе, который работал минуту назад
-
26-09-2019 - |
Вопрос
Заранее извиняюсь, но я никогда не видел эту ошибку раньше и не знаю, что включить. Я использую 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)
У меня нет подсказки, что случилось. Я даже не модифицировал рынок / раздел.
Вот конструктор, хотя:
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
Мне просто нужно знать, что вызывает ошибку и как это исправить. Спасибо!
Решение
А. VerifyError
означает, что Bytecode недействителен, который указывает на проблему компилятора. Я бы попробовал восстановить все в надежде, что он уходит, но иначе вы должны подать ошибку. BYTECODE требуется для вызова конструктора SuperClass вручную через invokenonvirtual superclass/<init>()V
, но вам не нужно добавлять super();
В источнике компилятор должен обрабатывать это
Другие советы
Я бы серьезно сомневаюсь, что это ошибка компилятора Java. Что-то подобное, скорее всего, было бы замечено кем-то другим и сообщили как ошибку. Но вы можете проверить это, перекомпилируя файл и используя javap
разобрать байты. Ищите следующую инструкцию в коде конструктора:
invokespecial #1 <Method java.lang.Object()>
Я думаю, что более вероятно, что что-то модифицирует байтекоды после Компилятор написал их. Возможности включают в себя некоторые профилировщики, которые изменяют байты для введения профилирования крюков, или некоторые процессоры аннотации, которые являются инъекционными зависимостями, точками среза и т. Д.
Это определенно проблема компилятора: генерируемый байткодом имеет другой двоичный формат.
Чтобы решить это: щелкните правой кнопкой мыши на проекте -> Свойства -> Источники -> Источник / двоичный формат
Измените его на любой формат подходит для вашего кода.
Просто попробуйте положить super()
в начале вашего конструктора в качестве ошибок состояний.
Я думал, что это обычно выведено и добавлено без ограничений, чтобы написать его, возможно, суперкласс CostOperations
нет пустого конструктора ..
Проверено: Compiler Bug.
Это случилось со мной в NetBeans. В NetBeans, когда вы пытаетесь скопировать файл .java в тот же каталог без "Refactor Copy", он помещает новый файл как «yourjavafile_1.java», и возникает проблема. Но если вы копируете этот файл с «Refactor Copy», проблем нет.
Это дает название как «YourJavafile1.java», но с рефакторингом.
I ОПИСАНИЕ МОЖЕТ БЫТЬ вызвано в результате в результате несоответствия спецификатора доступа класса / конструктора. Я только что решил подобную проблему, когда класс был объявлен спецификатором доступа к пакету, но его конструктор был объявлен публичным.
Просто сделать конструктор также иметь спецификатор доступа к пакету, решил проблему.
class Ngram{
public Ngram(String str, int count){
ngram = str;
freq = count;
}
String ngram;
int freq;
}