我是java的新手。 我创建了一个名为HelloWorld.java的文件;
package tp;
/**
*
* @author Utilisateur
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld works!");
}
}
通过执行以下命令编译它:javac HelloWorld.java与HelloWorld.java位于同一文件夹中; 执行代码:java -cp。与HelloWorld.java在同一文件夹中的HelloWorld位于。
但我收到此错误消息
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: javaTp/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
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)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
任何人都可以帮忙吗?
答案 0 :(得分:2)
包裹名称是您的问题。
Java使用已编译的类文件夹中的目录来表示包。因此,当您的HelloWorld类将自己定义为包'tp'时,您需要执行以下操作之一:
你可以运行它(使用现有的类):
> java -cp . tp.HelloWorld
或者您可以从类的顶部删除包声明,重新编译并运行:
> java -cp . HelloWorld
答案 1 :(得分:1)
因为您声明了包tp
,所以Java希望您的HelloWorld.class
文件存在于./tp目录中。
通常,Java项目将嵌套目录结构编译为镜像目录结构,例如:
src/
tp/
HelloWorld.java
classes/
tp/
HelloWorld.class
答案 2 :(得分:0)
您需要使用全名:java tp.HelloWorld