2016-01-11 94 views
2

我是java的初学者,参加了课程算法,它由Princeton提供。在课程中,教授要求我们将algs4.jar下载到一个文件夹中,并将algs4.jar添加到类路径中。[1]java错误:线程“main”中的异常java.lang.NoClassDefFoundError

我跟着它一步一步,并尝试像

import edu.princeton.cs.algs4.StdOut; 

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

编程的HelloWorld然而,当我编译文件,控制台提醒我,

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

如果你指的应该是classpath中的jar文件,你必须明确的名字。例如。

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

System.out他们真的提供一个名字吗?在这种情况下,您还可以安全地忽略那个罐子,通过使用System.out而不是StdOut

+0

如何在cmd中编写这条语句?谢谢。 – gaoxinge

+0

好,就像我在那个答案中写的一样。你的问题包含'java -cp“G:\ java \ helloworld”“HelloWorld”“ - 不过你需要添加jar文件,该文件应该放在类路径以及目录中。你没有提及任何开发工具或其他你不用的东西,如果你的问题是你不知道如何配置你的IDE,你应该说明你正在使用哪个IDE –

+0

其实我写的是java - cp“$(CURRENT_DIRECTORY)”“$(NAME_PART)”... – gaoxinge

3

您必须使用-cp标志来设置包含软件包的类路径。

当使用-cp标志,不要忘了包括使用.

所以,像javac -cp thejar.jar:.应该在Linux下工作或javac -cp thejar.jar;.应该为Windows

1

您在导入的类的StdOut工作,当前工作目录你的java代码(import edu.princeton.cs.algs4.StdOut;),你必须告诉java stdOut是如何实现的

请注意你提供的链接(http://algs4.cs.princeton.edu/code/)。你必须按照“安装教科书库”。部分首先安装这个lib。

3

根据instructions of this course,您应该使用javac-algs4进行编译,如果您导入其库,则应使用java-algs4执行。

如果你想知道这两个指令和原始指令javacjava之间的差异,你可以

  1. 使用type命令查找其中该命令是
  2. 使用catvim,看看有什么该命令的内容

你可以看到java-algs4加了-cp param按照Olaf Kock的说法,改为原始的java命令。

0

我只是包含在这两个javacjava命令,像这样一类路径参数:

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

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

此外,如果你是手动添加CLASSPATH环境变量的话,记得关闭,重新启动cmd控制台。

相关问题