java基本测试程序中的错误

时间:2011-09-29 06:29:18

标签: java

$cat JarTest.java 

package edu.testjava.simple;

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


$javac JarTest.java

$java JarTest

我收到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: JarTest (wrong name: edu/testjava/simple/JarTest)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: JarTest.  Program will exit.

为什么会这样?

包等有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

你需要这样做:

$ java -cp . edu.testjava.simple.JarTest

您需要使用完整的包名称指定类的名称(在本例中为edu.testjava.simple)。最后你不需要.class或.java。

您还可以查看How to execute a java .class from the command line的答案。

答案 1 :(得分:3)

是的,这是因为包裹。 Java强制项目结构与包结构相同。这意味着,edu.testjava.simple包中的类必须位于edu/testjava/simple/目录中。

您可以:

  • 删除包声明(但是,这只适用于此类“hello world”情况)
  • 使用javac -d . JarTest.java编译文件(这会将.class文件放在相应的目录中)并通过java edu.testjava.simple.JarTest启动它