大家好,我的问题是这样的,我在G:/javaTest文件下建立的Hello.java,源码如下:package gdgz.lwj;
public class Hello{
public static void say(){
System.out.println("hello,java!");
}
public static void main(String args[]){
Hello.say();
}
}当我在G:/javaTest 目录下执行 javac -d . Hello.java文件后,再执行 java gdgz.lwj.Hello 执行成功,但是当我进入G:/javaTest /gdgz/lwj目录(也就是Hello.class文件所在目录) 执行 java Hello时就G:/javaTest 出错了,具体如下G:\javaTest>java gdgz.lwj.Hellohello,java!G:\javaTest>cd gdgzG:\javaTest\gdgz>cd lwjG:\javaTest\gdgz\lwj>java HelloException in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: gdgz/lwj/Hello) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)Could not find the main class: Hello. Program will exit.我们知道如果刚才的Hello.java文件没有带包名,也就是package内容,我们是可以在.class文件所在目录去运行的,我不明白的就是为什么带了包名后了就不能在.class文件所在的目录下去运行,请大家指教。
5 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
新手最容易犯的错误。
可以在任意目录下执行Java命令。但需要注意:
1、Java命令的参数是“类的完整类名”,而不是“文件名”。
所以,不管在任何目录下运行gdgz.lwj.Hello类,都不能简单写作java Hello,
而需要写成下面形式:
2、如果类路径不在当前目录下,就需要自己设置classpath参数。
例如:
G:\javaTest>java gdgz.lwj.Hello
或者
G:\javaTest\gdgz\lwj>java -cp G:\javaTest gdgz.lwj.Hello
或者
任意目录下>java -cp G:\javaTest gdgz.lwj.Hello
添加回答
举报
0/150
提交
取消