【问题标题】:"Could not find the main class"“无法找到主类”
【发布时间】:2011-07-12 10:19:27
【问题描述】:

我正在尝试从命令提示符运行示例 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
    }
}

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

为什么找不到HelloWorldDesktop

【问题讨论】:

    标签: java classpath classnotfoundexception


    【解决方案1】:

    正确 - 问题是您在当前目录中有 HelloWorldDesktop.class,而它应该在 com/badlogic/gdx/helloworld 中

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

    通常你会希望按包组织你的源代码,但对于这个“hello world”测试可能不值得。

    【讨论】:

    • 谢谢 - 使用 -d .javac 导致我的(否则未修改的)命令工作 - 从更高的目录运行并修改路径也有效。我想知道为什么示例源代码嵌套如此之深,我从未想过源代码的目录结构足以阻止它执行。
    • 啊,我刚刚知道-d . 让编译器为你创建了一系列子目录。
    【解决方案2】:

    好的,首先你需要使用两个不同的工具编译然后运行应用程序

    第 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 class 错误。

    看看这张图片的前两行http://3.bp.blogspot.com/-FO4Hmg9LrI0/Td7FoSIi_XI/AAAAAAAAF6g/FVAiP0h8CSc/s1600/fiborial_java.PNG

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 2015-02-06
    • 2018-10-10
    • 2014-09-15
    • 2015-09-10
    • 2015-08-22
    相关资源
    最近更新 更多