簡體   English   中英

NoClassDefFoundError

[英]NoClassDefFoundError

我有一個引發NoClasDefFoundError的問題。 因為使用接口,這讓我感到困惑,並且沒有可用的類定義。 我已經閱讀了一些指向Classpath的帖子,但是我不認為這是這里的問題(盡管我可能錯了)。 我正在使用NetBeans 6.9.1 IDE。

我創建了一個示例設置來重現該問題。 四個項目:接口,對象,定位器和使用者。 在下面,您將找到實現。

消費者在運行時會抱怨缺少SomeObject實現,由於它正在接受接口,因此不應意識到。

線程“主”中的異常java.lang.NoClassDefFoundError:objects / SomeObject

我想念什么?

package interfaces;
public interface ISomeInterface { }

package objects;
import interfaces.ISomeInterface;
public class SomeObject implements ISomeInterface{ }

package locator;
import interfaces.ISomeInterface;
import objects.SomeObject;
public class Locator { public static ISomeInterface LocateImplementation() { return new SomeObject(); }}

package consumer;
import interfaces.ISomeInterface;
import locator.Locator;
public class Main { public static void main(String[] args) { ISomeInterface object = Locator.LocateImplementation(); }}

您可以像使用類一樣使用接口獲得NoClassDefFoundError異常。 認為異常名稱中的“類”是通過編譯類或接口而不是Java類而生成的.class文件。

就是說類/接口對象。SomeObject在您的類路徑上不可見。 檢查該.class文件的位置,並確保它在您的類路徑中-如果您肯定它在其中,請給我們提供一些屏幕截圖或可能有助於調試問題的內容。

將NoClassDefFoundError視為運行時鏈接問題。 JRE加載了一個類(或一個接口),並且引用了另一個類(或一個接口),但是找不到該引用的類。

如果存在打包/類路徑問題,以至於運行時環境無法反映構建時的情況,則可能發生這種情況。

如果要從IDE啟動此程序,請確保您不會忽略任何錯誤並仍要啟動。 某些類不會以這種方式生成。

通常,不是在缺少類時,而是在靜態初始化器中出現錯誤時,我都會遇到這些問題。

嘗試在調試器中運行代碼,並將異常斷點設置為在引發任何異常(無論是否捕獲)時中斷。 我敢打賭,由於某種原因,您在靜態初始值設定項中有未捕獲的異常。

任何接口都必須在類內部聲明

public class Calbacks {
    public interface IBaseFragmentInterface {
        void NotifyMainActivity();
    }
}

在locateImplementation()方法中,您將返回“ new SomeObject()”,JVM在調用時需要具有其定義。 我認為它不見了。

您應該檢查SomeObject類是否在類路徑中,因為-

好吧,JVM將運行以下代碼-

ISomeInterface object = Locator.LocateImplementation();

並在執行該操作時將調用Locator.LocateImplementation()。 此代碼在內部嘗試實例化您的SomeObject類,該類在類路徑中找不到。

所以你下面的理解

因為使用接口,這讓我感到困惑,並且沒有可用的類定義。

不是真的有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM