我的代码:
//package Foo;
public class Bar{
public static void main(String[] argv){System.out.println("test");}
}
现在,当我编译并运行它时,代码将起作用但是,当我取消注释第一行时,当我尝试使用
运行它时会抛出异常java Bar
它将抛出以下内容:
java.lang.NoClassDefFoundError: Bar (wrong name: Foo/Bar)
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)
Exception in thread "main"
当我尝试以这种方式运行时:
java Foo.Bar
我会得到这个:
Error: Could not find or load main class Foo.Bar
当我执行以下操作时将生成相同的输出:
java -classpath ./ Foo.Bar
即使我确实指定了当前路径的完整路径,我认为它不应该是必要的但是我这样做了,我仍然会发出这样的信息:"无法找到或加载..."。
答案 0 :(得分:4)
添加包Foo
时,您还应更改文件夹结构:
//before:
./Bar.java
//after adding Foo package:
./Foo/Bar.java
然后按如下方式运行它:
./java Foo.Bar
(注意:您应该在.
目录中,而不是./Foo
)
检查:http://docs.oracle.com/javase/tutorial/java/package/managingfiles.html
上述链接的引用:
//in the Rectangle.java file package graphics; public class Rectangle { ... }
然后,将源文件放在名称反映该类型所属包的名称的目录中:
.....\graphics\Rectangle.java