2011-07-12 123 views
5

我试图从命令promopt样本Java应用程序,但我发现了以下错误:“找不到主类”

Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/helloworld/HelloWorldDesktop 
Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.helloworld.HelloWorldDesktop 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: com.badlogic.gdx.helloworld.HelloWorldDesktop. Program will exit. 

我使用尝试的命令和运行这个程序是:

java -cp .;gdx.jar;gdx-backend-jogl.jar com.badlogic.gdx.helloworld.HelloWorldDesktop 

所有相关文件都在当前工作目录(的.java,的.class和.jar文件)

我用来建立.class文件的命令如下(有2个.java文件):

javac -cp gdx.jar;gdx-backend-jogl.jar HelloWorld.java HelloWorldDesktop.java 

再次,这是从同一个工作目录下运行 - 的HelloWorldDesktop.java内容是(或多或少):

package com.badlogic.gdx.helloworld; 

public class HelloWorldDesktop { 
    public static void main (String[] argv) { 
     // Application 
    } 
} 

我试图学习Java作为一个C#开发人员,所以当我在编程概念方面有很强的背景时,整个java工具链目前完全让我困惑。异常表明找不到类HelloWorldDesktop,但据我所知,我已经得到了正确的名称,并且将正确的.jar文件添加到了类路径中,因此Java应该能够加载类。

为什么找不到HelloWorldDesktop

回答

7

右键 - 问题是,你有在当前目录HelloWorldDesktop.class,而应该是在COM/badlogic/GDX/HelloWorld的

您可以使用javac命令解决这个问题 - 只需使用-d .告诉它来对待“。”作为输出的包根目录。

通常你会想要通过包来组织你的源代码,但对于这个“你好世界”测试它可能不值得。

+0

感谢的 - 无论是使用'-D .'用'javac'引起我的(未修改的)命令的工作 - 从一个更高的目录中变更路径运行也工作。我想知道为什么示例源代码嵌套得如此之深,我从未想到源代码的目录结构足够重要,无法执行。 – Justin

+0

嗯,我只是指出'-d .'让编译器为你创建了一系列的子目录。 – Justin

1

好吧,首先你需要编译并运行使用两种不同的工具

步骤1中的应用程序:它的javac.exe编译.java文件到.class文件。 例如:的javac.exe ProgramFolder \ *的Java(其中ProgramFolder =文件系统目录)

然后

步骤2:java.exe的,给作为参数要运行包括路径的应用程序,而是使用“\”作为文件夹使用“。”和你的班级的名字 例如:ProgramFolder.ClassProgram

这将工作。如果您尝试运行Java.exe ProgramFolder \ Program.class或只是ProgramFolder \ Program或进入类文件所在的文件夹,并且只执行Java.exe Program.class,它总是会给您找不到Main类错误。

看一看第2行这幅画http://3.bp.blogspot.com/-FO4Hmg9LrI0/Td7FoSIi_XI/AAAAAAAAF6g/FVAiP0h8CSc/s1600/fiborial_java.PNG

+0

如果我没有javac.exe,该怎么办? – Fuser97381

+1

你可能只有JRE。您需要下载JDK并安装它,这会为您提供javac.exe java编译器。从http://www.oracle.com/technetwork/java/javase/downloads/index.html获取它 –