分前に働いていた方法でにjava.lang.VerifyError
-
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)
私は何が起こったのかの手掛かりを持っていません。私も市場/ 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
私は、エラーの原因とどのようにそれを修正することですかを知る必要があります。ありがとう!
解決
A VerifyError
コンパイラの問題を指している、バイトコードが無効であることを意味します。私はそれが離れて行くことを期待して、すべてを再構築しようとするだろうが、そうでなければ、バグを報告しなければなりません。バイトコードを手動経由invokenonvirtual superclass/<init>()V
スーパークラスのコンストラクタを呼び出すために必要とされていますが、ソースにsuper();
を追加する必要はありません、コンパイラは、その
他のヒント
私は真剣に、これはJavaコンパイラのバグであることを疑うでしょう。そのようなことは、最も可能性の高い他の誰かが気づいて、バグとして報告されていたであろう。しかし、あなたは、ファイルを再コンパイルしてバイトコードを分解するjavap
を使用してこれを確認することができます。コンストラクタのコード内の次の命令を探します:
invokespecial #1 <Method java.lang.Object()>
私はそれが何かはの後にバイトコードを変更している可能性が高いと思いコンパイラはそれらを書いています。可能性がプロファイリングフックを注入するためにバイトコードを変更しているいくつかのプロファイラ、または依存性、カット点等を注入されたいくつかの注釈プロセッサを含む。
これは間違いなく、コンパイラの問題です:生成されたバイトコードは異なるバイナリ形式を持っている。
この問題を解決するには: プロジェクトを右クリック - >プロパティ - >ソース - >ソース/バイナリ形式
変更それまでどんなフォーマットあなたのコードに適しています。
ただ、エラー状態として、あなたのコンストラクタの先頭にsuper()
を入れてみます。
私は、それは通常、それを書くために、制約なしに推測されて、コメントを追加していたと思ったかもしれないCostOperations
のスーパークラスは、任意の空のコンストラクタを持っていません..
確認済み:コンパイラのバグ
これは、NetBeansで私に起こりました。あなたは「リファクタリングコピー」することなく、同じディレクトリ内に.javaファイルをコピーしようとすると、NetBeansで、それは「YourJavaFile_1.java」と問題occuresなどの新しいファイルを配置します。あなたは「リファクタリングコピー」でそのファイルをコピーした場合でも、問題はありません。
これは、しかし、リファクタリングと、 "YourJavaFile1.java" として名前を与えます。
私はそれがクラス/コンストラクタアクセス指定の不一致での結果として引き起こされることが見解を示します。私はちょうどクラスはパッケージアクセス指定子で宣言されましたが、そのコンストラクタがパブリック宣言された同様の問題を解決します。
も持っているだけで、コンストラクタを作るパッケージアクセス指定子は、問題を解決しました。
class Ngram{
public Ngram(String str, int count){
ngram = str;
freq = count;
}
String ngram;
int freq;
}