java错误:线程中的异常" main" java.lang.NoClassDefFoundError

时间:2016-01-11 07:41:53

标签: java

我是java的初学者,参加了由普林斯顿提供的课程 Algorithm 。在课程中,教授要求我们将 algs4.jar 下载到一个文件夹,并将 algs4.jar 添加到类路径中。[1]

我一步一步地按照它,尝试编写 HelloWorld 之类的

import edu.princeton.cs.algs4.StdOut;

public class HelloWorld {
     public static void main(String args[]) {
     StdOut.print("Hello World!");
}
} 

然而,当我编译文件时,控制台提醒我

NPP_EXEC: "java_Compile_Run"
NPP_SAVE: G:\java\helloworld\HelloWorld.java
javac -encoding UTF-8 "G:\java\helloworld\HelloWorld.java"
Process started >>>
<<< Process finished. (Exit code 0)

==========编译成功后开始运行==========
java -cp "G:\java\helloworld" "HelloWorld"
Process started >>>
Exception in thread "main" java.lang.NoClassDefFoundError:
edu/princeton/cs/algs4/StdOut
at HelloWorld.main(HelloWorld.java:5)
Caused by: java.lang.ClassNotFoundException: edu.princeton.cs.algs4.StdOut
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
<<< Process finished. (Exit code 1)
================ READY ================ 

我已经检查了我的类路径和我的编程文件。这个错误是什么意思?我该如何解决?

任何建议都有帮助。谢谢。

[1] http://algs4.cs.princeton.edu/code/

5 个答案:

答案 0 :(得分:5)

如果您指的是应该在类路径上的jar文件,则必须明确命名。例如。

java -cp "G:/java/helloworld;G:/whereever/algs4j.jar" HelloWorld

他们真的System.out提供了另一个名字吗?在这种情况下,您还可以使用System.out代替StdOut

安全地忽略该jar

答案 1 :(得分:4)

您可能必须使用-cp标志来设置类路径以包含该包。

使用-cp标记时,请勿忘记使用.

包含当前工作目录

因此,像javac -cp thejar.jar:.这样的东西应该在linux中工作,或者javac -cp thejar.jar;.应该适用于windows

答案 2 :(得分:4)

根据instructions of this course,您应该使用javac-algs4进行编译,并在导入其库时执行java-algs4

如果您想了解这两个命令与原始命令javacjava之间的差异,您可以

  1. 使用type命令查找此命令的位置
  2. 使用catvim查看此命令的内容
  3. 正如Olaf Kock所说,您可以看到java-algs4为原始-cp命令添加了java参数。

答案 3 :(得分:1)

你在java代码中导入了类StdOut(导入edu.princeton.cs.algs4.StdOut;),你必须告诉java如何实现stdOut

收录您提供的链接(http://algs4.cs.princeton.edu/code/)。您必须遵循&#34;安装教科书库。&#34;首先安装此库。

答案 4 :(得分:1)

我只是在javacjava命令中包含了一个类路径参数,如下所示:

javac -classpath ".;drive\path\to\algs4.jar" Hello.java

java -classpath ".;drive\path\to\algs4.jar" Hello

此外,如果您手动添加CLASSPATH环境变量,请记住关闭并重新启动cmd控制台。