Hello World上的NoClassDefFoundError

时间:2013-05-02 16:48:37

标签: java classpath noclassdeffounderror

我正在尝试运行一个非常简单的程序并遇到错误。我做了一个非常简单的helloworld java程序,并且无法在mac上从终端运行它。我已经检查以确保正确设置了类路径,并且对于为什么它没有运行感到困惑。

以下是该计划:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

以下是终端命令:

Last login: Thu May  2 12:01:50 on ttys000
172-26-125-179:~ rohan$ cd /Users/rohan/Desktop 
172-26-125-179:Desktop rohan$ ls
Hello.java
172-26-125-179:Desktop rohan$ echo $CLASSPATH

172-26-125-179:Desktop rohan$ export CLASSPATH=/Users/rohan/Desktop
172-26-125-179:Desktop rohan$ echo $CLASSPATH
/Users/rohan/Desktop
172-26-125-179:Desktop rohan$ java Hello.java
Exception in thread "main" java.lang.NoClassDefFoundError: Hello/java
Caused by: java.lang.ClassNotFoundException: Hello.java
    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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
172-26-125-179:Desktop rohan$ 

任何想法都将不胜感激! 更新忽略先前的情况,这是对我的问题的更好看法:

Last login: Thu May  2 13:05:17 on ttys000
172-26-125-179:~ rohan$ cd /Users/rohan/Dropbox/Current/ds/lab6 
172-26-125-179:lab6 rohan$ ls
Hello.java
172-26-125-179:lab6 rohan$ cat Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("hi");
    }
}
172-26-125-179:lab6 rohan$ echo $CLASSPATH

172-26-125-179:lab6 rohan$ export CLASSPATH=/Users/rohan/Dropbox/Current/ds/lab6 
172-26-125-179:lab6 rohan$ echo $CLASSPATH
/Users/rohan/Dropbox/Current/ds/lab6
172-26-125-179:lab6 rohan$ javac Hello.java
172-26-125-179:lab6 rohan$ java Hello.class
Exception in thread "main" java.lang.NoClassDefFoundError: Hello/class
Caused by: java.lang.ClassNotFoundException: Hello.class
    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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
172-26-125-179:lab6 rohan$ 

4 个答案:

答案 0 :(得分:1)

尝试:

$ javac Hello.java

$ java Hello

答案 1 :(得分:1)

你需要编译它。

javac Hello.java
java Hello

第一个命令在当前工作目录(示例中为Desktop)中生成一个文件Hello.class。第二个使用主类Hello运行Java程序。

请注意第二个命令中没有.java。如果您编写java Hello.java,JRE会在包java中查找名为Hello的类(请注意输出:在“Hello / java”中找不到类)。

如果javac给出错误,那么您可能需要安装Java Development Kit(JDK)以及Java Runtime Environment(JRE)。

答案 2 :(得分:0)

运行Java时,请不要在要运行的类名中包含“.java”。尝试

java Hello

ls输出,它甚至还没有编译。你当然必须先编译它。

javac Hello.java

修改

此问题的补充说明 已成功编译javac。但现在正在运行命令java Hello.class。不要在要运行的Java类名中包含“.class”(或前面的“.java”)。

解决方案仍然是:

java Hello

答案 3 :(得分:0)

使用javac编译器编译java程序。它与jdk捆绑在一起。你需要安装jdk然后像

一样编译它
 javac Hello.java

它将生成一个类文件Hello.class,然后您可以将该类文件作为

运行
java Hello