在主类中使用包名,会导致NoClassFoundException



代码:

//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。酒吧

我将得到这个:

Error: Could not find or load main class Foo.Bar

当我执行以下操作时将生成相同的输出:

java -classpath ./ Foo.Bar

即使当我指定完整的路径到当前路径,我认为它不应该是必要的,但我这样做,我仍然得到的消息:"无法找到或加载…"。

当您添加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 {
    ... 
 }

然后,将源文件放在一个目录中,该目录的名称反映了该类型所属的包的名称:

 .....graphicsRectangle.java

相关内容

  • 没有找到相关文章

最新更新