我的java代码出了什么问题

时间:2012-07-17 16:35:25

标签: java

我正在学习java。 我的示例目录如下所示:

  

./ SRC
  ./src/yxy
  ./src/yxy/pack
  ./src/yxy/pack/testf
  ./src/yxy/pack/testf/Person.java
  ./Hello.java
  ./Hello.class

     

./ testpack
  ./testpack/yxy
  ./testpack/yxy/pack
  ./testpack/yxy/pack/testf
  ./testpack/yxy/pack/testf/Person.class
  ./testpack.jar

src目录用作库。它提供了Person类 src的输出位于testpack目录中 我根据testpack direcotory生成了一个testpack.jar Hello.java是主要的java文件。它使用Person类。

Person.java 源代码如下:

package yxy.pack.testf;

public class Person {
  private String name;

  public Person(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

Hello.java 源代码如下:

import java.io.*; //IOException
import java.util.*; //Enumeration

import yxy.pack.testf.Person;

public class Hello{

    public static void main(String[] args)throws IOException  {
        Person p=new Person("abc");
        Class cls=Person.class;
        ClassLoader clsLoader=cls.getClassLoader();
        String clsFile=cls.getName();
        System.out.println("end");
    }
}

我使用以下方法在当前目录下生成testpack.jar。

  

javac -verbose -d testpack src \ yxy \ pack \ testf \ Person.java
  cd testpack
  jar -cvf testpack.jar ./yxy
  移动testpack.jar ./../testpack.jar
  cd ..

我使用以下方法构建并运行应用程序:

  

javac -classpath。\ testpack.jar Hello.java
  java -classpath。\ testpack.jar Hello

这是我得到的错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: Hello  
    Caused by: java.lang.ClassNotFoundException: Hello  
            at java.net.URLClassLoader$1.run(Unknown Source)  
            at java.security.AccessController.doPrivileged(Native Method)  
            at java.net.URLClassLoader.findClass(Unknown Source)  
            at java.lang.ClassLoader.loadClass(Unknown Source)   
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)  
            at java.lang.ClassLoader.loadClass(Unknown Source)  
    Could not find the main class: Hello.  Program will exit.

我不知道为什么会这样。我该如何解决?

  

java Hello

    Exception in thread "main" java.lang.NoClassDefFoundError: yxy/pack/testf/Person

            at Hello.main(Hello.java:10)
    Caused by: java.lang.ClassNotFoundException: yxy.pack.testf.Person
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            ... 1 more

我该如何解决这个问题?

=== 无论如何,我发现了如何修复。只需在cmd中使用以下内容即可。

>java -classpath testpack.jar;. Hello

我必须添加testpack.jar和当前路径。到类路径。

1 个答案:

答案 0 :(得分:2)

嗯,这可能是很多东西,如果你是Java的初学者,我建议从IDE开始,如果你不想要这个,那么这里有3 ways to resolve NoClassDefFoundError in Java上的链接

以下是另一位用户的摘录,解释了此错误发生的原因:

  

当我在包中创建一个类文件时,我总是会遇到这个错误   然后尝试从包中运行程序。解决方案   是在你的文件系统中上升一级,以便你在这个级别上   包装,而不是包装内容。

     

例如,如果您的包名称是问候语,而您的类文件是   name是HelloWorld,您的程序包含以下行:

     

包问候;

     

包名称对应于文件系统中的目录,例如   C:\的Java \问候。您的类文件在该目录中,即它   文件名是C:\ Java \ greetings \ HelloWorld.class。

     

如果您定位到c:\ Java \ greetings,然后执行:

     

java HelloWorld

     

您收到NoClassDefFound错误。如果你上一个目录,在这里   case到C:\ Java,而不是C:\ Java \ greetings,然后执行以下操作:

     

java greetings.HelloWorld

     

你的程序应该适合你。