java错误:线程中出现异常;“主要”;java.lang.NoClassDefFoundError

java错误:线程中出现异常;“主要”;java.lang.NoClassDefFoundError,java,Java,我是一名java初学者,正在学习普林斯顿大学提供的算法课程。在课程中,教授要求我们将algs4.jar下载到一个文件夹中,并将algs4.jar添加到类路径中。[1] 我一步一步地遵循它,并尝试编写一个类似HelloWorld的程序 然而,当我编译文件时,console提醒我 NPP_EXEC: "java_Compile_Run" NPP_SAVE: G:\java\helloworld\HelloWorld.java javac -encoding UTF-8 "G:\java\hellow

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

我一步一步地遵循它,并尝试编写一个类似HelloWorld的程序

然而,当我编译文件时,console提醒我

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 ================ 
NPP\u EXEC:“java\u编译\u运行”
NPP_保存:G:\java\helloworld\helloworld.java
javac-编码UTF-8“G:\java\helloworld\helloworld.java”
进程已启动>>>
>
线程“main”java.lang.NoClassDefFoundError中出现异常:
edu/princeton/cs/algs4/StdOut
位于HelloWorld.main(HelloWorld.java:5)
原因:java.lang.ClassNotFoundException:edu.princeton.cs.algs4.StdOut
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 还有一个

如果您引用的jar文件应该位于类路径上,那么必须显式地命名它。例如

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

他们真的为
System.out
提供了另一个名称吗?在这种情况下,您还可以使用
System.out
而不是
StdOut
安全地忽略该jar,您可能需要使用
-cp
标志来设置类路径以包含包

使用
-cp
标志时,不要忘记使用
包含当前工作目录


因此,类似于
javac-cpthejar.jar:.
的东西应该在linux或
javac-cpthejar.jar;中工作应该适用于windows

如果在java代码中导入了类StdOut(import edu.princeton.cs.algs4.StdOut;),则必须告诉java StdOut是如何实现的

根据您提供的链接()。您必须按照“安装教科书库”部分首先安装此库。

根据,如果导入了它们的库,您应该使用
javac-algs4
进行编译,并使用
java-algs4
执行

如果您想知道这两个命令与原始命令
javac
java
之间的区别,您可以

  • 使用
    键入
    命令查找此命令的位置
  • 使用
    cat
    vim
    查看此命令的内容

  • 您可以看到,
    java-algs4
    向原始
    java
    命令添加了
    -cp
    参数,正如Olaf Kock所说。

    我只是在
    javac
    java
    命令中都包含了类路径参数,如下所示:

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


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

    如何在cmd中编写此语句?谢谢你,就像我在回答中写的那样。您的问题包含
    java-cp“G:\java\helloworld”“helloworld”
    ——但是您需要添加jar文件,该文件应该位于类路径和目录中。您没有提到任何开发工具或除javac之外使用的任何其他工具-如果您的问题是不知道如何配置IDE,那么您应该说明您正在使用的IDE,猜测$(当前目录)将被替换,并尝试查看附加jar需要放在哪里。提示:
    java-cp“$(当前目录);G:/wherever/algs4j.jar”“$(NAME\u PART)”
    关闭时,我将把知道jar放在哪里的任务留给您
    javac -classpath ".;drive\path\to\algs4.jar" Hello.java
    
    java -classpath ".;drive\path\to\algs4.jar" Hello