Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoClassDefFoundError_Java_Interface_Noclassdeffounderror - Fatal编程技术网

Java NoClassDefFoundError

Java NoClassDefFoundError,java,interface,noclassdeffounderror,Java,Interface,Noclassdeffounderror,我有一个问题,NoClasDefFoundError被抛出。这让我很困惑,因为我使用的是接口,并且没有可用的类定义。我读过一些指向类路径的帖子,但我不认为这是这里的问题,尽管我可能错了。我正在使用NetBeans 6.9.1 IDE 我已经创建了一个示例设置来重现该问题。四个项目:接口、对象、定位器和使用者。您将在下面找到实现 在运行时,消费者抱怨缺少SomeObject实现,因为它正在接受接口,所以不应该意识到这一点 主线程中的异常 java.lang.NoClassDefFoundError

我有一个问题,NoClasDefFoundError被抛出。这让我很困惑,因为我使用的是接口,并且没有可用的类定义。我读过一些指向类路径的帖子,但我不认为这是这里的问题,尽管我可能错了。我正在使用NetBeans 6.9.1 IDE

我已经创建了一个示例设置来重现该问题。四个项目:接口、对象、定位器和使用者。您将在下面找到实现

在运行时,消费者抱怨缺少SomeObject实现,因为它正在接受接口,所以不应该意识到这一点

主线程中的异常 java.lang.NoClassDefFoundError: 对象/某物

我错过了什么

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异常,就像使用类一样。以异常的名称考虑类,是编译类或接口而不是java类生成的.class文件。


这意味着类/接口对象.SomeObject在类路径上不可见。检查该.class文件的位置并确保它在您的类路径上-如果您确定它在那里,请给我们一些屏幕截图或一些可能有助于调试问题的内容。

将NoClassDefFoundError视为运行时链接问题。JRE加载了一个类或接口,它引用了另一个类或接口,但找不到该引用的类

如果存在打包/类路径问题,以致运行时环境无法反映构建时的情况,那么这是唯一可能发生的方法


如果您是从IDE启动它,请确保您没有忽略任何错误,也没有启动它。某些类不会以这种方式生成。

将NoClassDefFoundError视为运行时链接问题。JRE加载了一个类或接口,它引用了另一个类或接口,但找不到该引用的类

如果存在打包/类路径问题,以致运行时环境无法反映构建时的情况,那么这是唯一可能发生的方法


如果您是从IDE启动它,请确保您没有忽略任何错误,也没有启动它。某些类不会以这种方式生成。

在locateImplementation方法中,您将返回新的SomeObject,
JVM在被调用时需要有自己的定义。我认为它丢失了。

在locateImplementation方法中,您正在返回新的SomeObject,
JVM在被调用时需要有自己的定义。我认为它丢失了。

您应该检查SomeObject类是否在类路径中,因为-

JVM将运行以下代码-

ISomeInterface object = Locator.LocateImplementation();
当它这样做时,它将调用Locator.LocateImplementation。此代码在内部尝试实例化在类路径中找不到的SomeObject类

所以你的理解力不足

这让我很困惑,因为我正在使用 接口,并且没有类定义 应该有


不是真的有效。

您应该检查SomeObject类是否在类路径中,因为-

JVM将运行以下代码-

ISomeInterface object = Locator.LocateImplementation();
当它这样做时,它将调用Locator.LocateImplementation。此代码在内部尝试实例化在类路径中找不到的SomeObject类

所以你的理解力不足

这让我很困惑,因为我正在使用 接口,并且没有类定义 应该有


不是真的有效。

通常我遇到这些问题不是因为缺少类,而是因为静态初始值设定项中存在错误


尝试在调试器中运行代码,并将异常断点设置为在引发任何异常(无论是否捕获)时中断。我敢打赌,由于某种原因,静态初始值设定项中存在未捕获的异常。

通常,我遇到这些问题的原因不是缺少类,而是静态初始值设定项中存在错误


尝试在调试器中运行代码,并将异常断点设置为在引发任何异常(无论是否捕获)时中断。我敢打赌,由于某种原因,静态初始值设定项中存在未捕获的异常。

任何接口都必须在类内声明

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

任何接口都必须在类内声明

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

谢谢大家的回答!!这毕竟是一个类路径问题。我并没有意识到消费者也需要看到对象,尽管定位器中有这些对象
这是classpath。谢谢大家的回答!!这毕竟是一个类路径问题。我不知道消费者也需要查看对象,尽管定位器在其类路径中有对象。这是我的问题:引用的引用不在我的类路径中。这是我的问题:引用的引用不在我的类路径中。