运行时的java.lang.NoClassDefFoundError:需要Class不在Classpath上

时间:2013-09-26 13:50:37

标签: java jar classpath classnotfoundexception

我已经尝试了本网站上建议的几种方法以及其他一些无效的方法。

- 运行Angstrom嵌入式Linux,OpenJDK6,Shark VM。

文件结构

所有.java和.jar文件都存储在目录./src

  • jarfiles:j1.jar j2.jar

  • 源代码:Coder.java,WrapperClass.java

编译并运行

  • javac -cp j1.jar:j2.jar Coder.java WrapperClass.java
  • 成功编译,输出Coder.class,WrapperClass.class,以及其他几个文件,包括Coder $ 1.class到Coder $ 6.class,以及Coder $ Main_thread.class和Coder $ Progress_Bar_Thread.class,任何洞察所有这些.class文件的用途?

  • 运行尝试全部以java.lang.ClassNotFoundException终止。

    • 〜/ coder / src:java Package.Coder
    • 〜/ coder / src:java -cp jar1.jar:jar2.jar Package.Coder
    • 〜/ coder:java ./src/Package.Coder
    • 〜/ coder:java -cp jar1.jar:jar2.jar ./src/Package.Coder

非常感谢你的帮助。我在NetBeans上运行它并且可以验证它是否是功能代码,只需要让它在Linux上运行即可。

Stacktrace是:

线程“main”中的异常java.lang.NoClassDefFoundError:包/编码器引起:java.lang.ClassNotFoundException:Package.Coder

at java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:321)

at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294)

at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)

无法找到主类:Package.Coder。程序将退出

1 个答案:

答案 0 :(得分:1)

假设这个结构

/coder
    /src
        /Package
            /Coder.java
            /WrapperClass.java
        /j1.jar
        /j2.jar

您需要从/src编译为

javac -cp j1.jar:j2.jar Package/Coder.java Package/WrapperClass.java

这将在.class中创建/Package个文件。然后,您可以再次从/src

运行它
java -cp j1.jar:j2.jar Package.Coder

假设Coder类有一个main方法,这是您的切入点。