2013-05-02 116 views
1

我试图运行一个非常简单的程序,并且遇到错误。我做了一个非常简单的helloworld java程序,并且无法在Mac上从终端运行它。我已经检查确保classpath设置正确,并且为什么它没有运行而感到困惑。Hello World上的NoClassDefFoundError

下面是程序:

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$ 

任何想法将不胜感激! UPDATE忽略在前一种情况下,这是我的问题的一个更好的视野:

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$ 
+0

哪里是类文件中创建? – OldProgrammer 2013-05-02 16:52:12

+1

@OldProgrammer它不是;那就是问题所在。看看'ls'输出。 – wchargin 2013-05-02 16:53:24

回答

0

当运行Java,请不要在你想运行的类名包括“的.java”。尝试

java Hello 

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

javac Hello.java 

编辑

的除了质疑各国现在,它javac编译成功。但是现在命令java Hello.class正在运行。不要在Java类名称中包含“.class”(或前面的“.java”)来运行。

解决办法仍然是:

java Hello 
+0

这不是问题。它没有编译。 – wchargin 2013-05-02 16:52:20

+0

这个问题不清楚它是否被编译。但是“java Hello.java”肯定是错误的。但无论如何我会更新我的答案...... – rgettman 2013-05-02 16:53:47

+0

它*是*清楚;他是目录,只有一个文件。 – wchargin 2013-05-02 16:55:32

1

尝试:

$的javac Hello.java

$的Java你好

1

你需要编译它。

javac Hello.java 
java Hello 

第一个命令生成一个文件,Hello.class,在当前工作目录(桌面在你的例子)。第二个运行主程序为Hello的Java程序。

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

如果javac给出错误,那么您可能需要安装Java开发工具包(JDK)以及Java运行时环境(JRE)。

+0

谢谢,这工作完美! – rohan123 2013-05-02 20:58:02

0

java程序使用javac编译器进行编译。它捆绑了jdk。你需要安装JDK然后编译它像

javac Hello.java 

它会生成一个类文件Hello.class,那么你可以运行的类文件

java Hello 
+0

非常感谢! – rohan123 2013-05-02 20:58:23