Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;找不到主类“;_Java_Classpath_Classnotfoundexception - Fatal编程技术网

Java &引用;找不到主类“;

Java &引用;找不到主类“;,java,classpath,classnotfoundexception,Java,Classpath,Classnotfoundexception,我试图从命令promot运行示例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.

我试图从命令promot运行示例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文件):

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

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


为什么它找不到
HelloWorldDesktop

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

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


通常情况下,您也会希望按包组织源代码,但对于这个“hello world”测试,可能不值得这样做。

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

步骤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,则始终会出现找不到主类错误


看看这张图片的前两行

谢谢-都使用了
-d.
javac
使我的(未修改的)命令起作用-从更高的目录运行,修改路径也起作用。我想知道为什么示例源代码嵌套得如此之深,我从来没有想到源代码的目录结构足以阻止它的执行。啊,我刚刚把
-d.
推到编译器为您创建了一系列子目录。如果我没有javac.exe,我该怎么办?您可能只有JRE。您需要下载并安装JDK,这将为您提供javac.exe java编译器。从以下位置获取:
javac -cp gdx.jar;gdx-backend-jogl.jar HelloWorld.java HelloWorldDesktop.java
package com.badlogic.gdx.helloworld;

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