2012-05-22 39 views
1

我查看了其他NoClassDefFoundError问题,未找到适用于我的解决方案。我正在使用Eclipse IDE编写程序,并且当我右键单击 - >在Eclipse中作为Java应用程序运行,但试图通过命令行运行它时,它运行良好,运行上述错误。我使用的JRE是(我认为)Java60。该程序使用javac HelloWorld.java进行编译,运行良好,然后调用java -cp。 HelloWorld抛出错误。任何帮助解决这个问题将不胜感激。HelloWorld程序中的NoClassDefFoundError

代码是:

package tool; 

public class HelloWorld { 

public static void main(String[] args){ 
    System.out.println("Hello World!"); 
} 

} 

从运行 “C:\ MADtool \ HostDBtoMADTool的\ src \工具” 命令行

输出是:

C:\MADtool\HostDBtoMADtool\src\tool>java -cp . HelloWorld 
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam 
e: tool/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

后的确切异常堆栈跟踪和你的目录结构 –

+0

在这里展示您的HelloWorld.java文件。 –

+0

你可以发布你的代码吗?这将是很好的先排除:) –

回答

0

您输入软件包“tools”并创建一个javac(这是正确的),但是然后尝试从该软件包文件夹中启动该类(出错了)。

您必须首先切换到src目录,因为classpath是相对于源文件夹。如果你使用包(你真的应该做什么)。你必须确保从正确的启动文件夹中启动代码:

C:\MADtool\HostDBtoMADtool\src>java -cp . HelloWorld 

更新 看一看类路径定义:Wikipedia

+0

这帮助我让它工作!我更改为src目录并运行'java -cp。工具/ HelloWorld'和它的工作!谢谢,你能告诉我为什么我在做什么是错的,所以我可以确保我不会在未来犯同样的错误?我阅读了链接,并且可以理解它,但我没有看到如何将目录级别排序。 P.S.由于某种原因,您的右括号没有添加到链接的末尾 –

+0

我在答案中改变了一点。但你应该谷歌了解更多关于创建**。jar **文件和构建java项目的信息。提示:搜索** ant **或** maven ** –

0

从我很老了从命令行expirience我编译我的java程序:

javac MyClass.java 

然后尝试运行它解析compilen级PARAM与extention:

java MaClass.class 

然后我得到这个例外。当我只解析文件名而不扩展时,它可以工作:

java MyClass 
0

也许你在类路径中缺少一些依赖关系?

我的意思是你的HelloWorld类可能依赖于其他应该包含在类路径中的jar。 Eclipse为你做,但使用命令行你必须提供适当的类路径。

2

执行$ java HelloWorld将在默认包HelloWorld类搜索。没有这样的班级存在,只有tool.HelloWorld

此外,如果您运行$ java tool.HelloWorld,那么Java将尝试找到该文件tool/HelloWorld.class,所以你需要确保你的工作目录是目录包含tool/tool/本身。

0

我认为,在出现问题时的完整命令总是帮助:

C:\MADtool\HostDBtoMADtool\src>java -cp "C:\MADtool\HostDBtoMADtool\src" tool.HelloWorld 
C:\MADtool\HostDBtoMADtool\src\tool>java -cp "C:\MADtool\HostDBtoMADtool\src" tool.HelloWorld