提前道歉,但我以前从未见过这个错误,也不知道要包括什么。我正在使用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
我只需要知道导致错误的原因以及如何解决错误。谢谢!
答案 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;
}