【问题标题】:ClassNotFoundException & NoClassDefFoundError (Why??)ClassNotFoundException & NoClassDefFoundError(为什么??)
【发布时间】:2014-07-21 08:17:55
【问题描述】:

我想做 Cytoscape 简单的应用程序(就像一个插件程序)。

所以我应该制作一个.jar 文件,并将其安装在 Cytoscape 程序中。

我的问题如下:

我给你看两个案例。

有 6 个类(A、B、C、D、E、F)和 2 个 .jar 文件(代表其他 API)

A (CytoscapeLeapMotionApp) 是主类(其实不包括 main 方法,但它是安装 App 时运行的第一个类)。

C,E 是我创建的类。

B,D 在 1.jar 中。

F(Listener) 在 2.jar(leap) 中。

  • 案例一

    A 扩展 B

    C 实例在 A 处创建

    C 扩展 D

    E实例在C创建

    E 扩展 F

结果:

Caused by: java.lang.NoClassDefFoundError: com/leapmotion/leap/Listener     at
CytoscapeLeapMotionApp.<init>(CytoscapeLeapMotionApp.java:9)    ... 21
more

Caused by: java.lang.ClassNotFoundException:
com.leapmotion.leap.Listener    at
java.net.URLClassLoader$1.run(URLClassLoader.java:202)  at
java.security.AccessController.doPrivileged(Native Method)  at
java.net.URLClassLoader.findClass(URLClassLoader.java:190)  at
java.lang.ClassLoader.loadClass(ClassLoader.java:306)   at
java.lang.ClassLoader.loadClass(ClassLoader.java:247)   ... 22 more
  • 案例 2

    A 扩展 B

    C 实例在 A 处创建

    C 扩展 D

    F 实例在 C 处创建

结果:

很好,没有错误!

以下是E扩展F

public final class SampleListener extends Listener {
    //nothing
}

【问题讨论】:

  • 尝试为监听器提供带有命名空间的完整类名
  • 你是如何运行应用程序的?在 IDE 中还是通过命令行?
  • @ray 对不起,因为我是初学者,我不知道命名空间是什么意思。 :(
  • @JamesB 我制作了一个 .jar 文件,其中包括所有类。并启动主程序(Cytoscape),安装 .jar 文件。
  • 如何运行jar文件?

标签: java noclassdeffounderror classnotfoundexception leap-motion cytoscape


【解决方案1】:

这个错误

原因:java.lang.NoClassDefFoundError: com/leapmotion/leap/Listener at CytoscapeLeapMotionApp.(CytoscapeLeapMotionApp.java:9) ... 21 更多

建议当 CytoscapeLeapMotionApp 运行时,类型 com.leapmotion.leap.Listener 不在类路径中。

您已指出此类型位于名为 2.jar 的 jar 文件中,因此需要在重试之前将其添加到类路径中。

【讨论】:

  • 但是当我尝试案例 2 时,它也使用类 F(即在 2.jar 中)。但是没有错误。我不知道为什么会这样。
  • @DaeSungKim 你如何处理这两个案例?
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多