关于Java:”找不到或加载主类”是什么意思?Could not find or load main class

What does “Could not find or load main class” mean?

新Java开发人员遇到的一个常见问题是,它们的程序无法用错误消息运行:EDCOX1(0)。

这意味着什么,是什么导致的,你应该如何修复它?


java 命令语法

首先,您需要了解使用javajavaw命令启动程序的正确方法。好的。

正常的syntax1是:好的。

1
    java [ <option> ... ] <class-name> [ ...]

其中EDCOX1×3是一个命令行选项(从一个"-"字符开始),EDCOX1(4)是一个完全合格的Java类名,EDCOX1 OR 5是一个传递给应用程序的任意命令行参数。1-"可执行"JAR文件有第二种语法,我将在底部描述。好的。

类的完全限定名(FQN)通常按照Java源代码编写;好的。

1
    packagename.packagename2.packagename3.ClassName

但是,有些版本的java命令允许您使用斜杠而不是句点;例如。好的。

1
    packagename/packagename2/packagename3/ClassName

它看起来像一个文件路径名,但不是。请注意,完全限定名的术语是标准Java术语…不是我为了迷惑你而编造的。好的。

下面是java命令的示例:好的。

1
    java -Xmx100m com.acme.example.ListUsers fred joe bert

以上将导致java命令执行以下操作:好的。

  • 搜索com.acme.example.ListUsers类的编译版本。
  • 加载类。
  • 检查该类是否有一个main方法,该方法具有由public static void main(String[])提供的签名、返回类型和修饰符。(注意,方法参数的名称不是签名的一部分。)
  • 调用该方法,将命令行参数("fred"、"joe"、"bert")作为String[]传递给它。
  • Java无法找到类的原因

    当您收到消息"找不到或加载主类…"时,这意味着第一步失败。java命令找不到类。实际上,消息中的"…"将是java正在查找的完全限定类名。好的。

    为什么它找不到班级?好的。原因1-您在classname参数中犯了错误

    第一个可能的原因是您可能提供了错误的类名。(或……正确的类名,但格式错误。)考虑到上面的示例,这里有各种错误的方法来指定类名:好的。

    • 示例1-简单类名:好的。

      1
      java ListUser

      当类在诸如com.acme.example这样的包中声明时,则必须在java命令中使用包含包名称的完整类名;例如。好的。

      1
      java com.acme.example.ListUser
    • 示例2-文件名或路径名而不是类名:好的。

      1
      2
      java ListUser.class
      java com/acme/example/ListUser.class
    • 示例3-外壳不正确的类名:好的。

      1
      java com.acme.example.ListUser
    • 示例4-打字错误好的。

      1
      java com.acme.example.mistuser
    • 示例5-源文件名好的。

      1
      java ListUser.java
    • 示例6-您完全忘记了类名好的。

      1
      java lots of arguments

    原因2-未正确指定应用程序的类路径

    第二个可能的原因是类名是正确的,但是java命令找不到类。要理解这一点,您需要理解"类路径"的概念。Oracle文档很好地解释了这一点:好的。

    • java指挥文件
    • 正在设置类路径。
    • Java教程-路径和类路径

    所以…如果您正确地指定了类名,接下来要检查的是您是否正确地指定了类路径:好的。

  • 阅读上面链接的三个文档。(是的…读它们。Java程序员至少理解Java类路径机制如何工作的基础是很重要的。
  • 查看命令行和/或运行java命令时生效的classpath环境变量。检查目录名和JAR文件名是否正确。
  • 如果类路径中有相对路径名,请检查它们是否正确解析…从运行java命令时生效的当前目录中。
  • 检查类(在错误消息中提到)是否可以位于有效的类路径上。
  • 注意,对于Windows和Linux和Mac OS,类路径语法是不同的。(类路径分隔符在Windows上为;,在其他窗口上为:。如果为平台使用了错误的分隔符,则不会收到明确的错误消息。相反,您将获得路径上不存在的文件或目录,这些文件或目录将被静默忽略。)
  • 原因2a-错误的目录在类路径上

    在类路径上放置目录时,它在概念上对应于限定名称空间的根目录。通过将完全限定名映射到路径名,类位于该根下的目录结构中。例如,如果"/usr/local/acme/classes"在类路径上,那么当jvm查找名为com.acme.example.Foon的类时,它将查找具有此路径名的".class"文件:好的。

    1
      /usr/local/acme/classes/com/acme/example/Foon.class

    如果您在类路径上放置了"/usr/local/acme/classes/com/acme/example",那么JVM将无法找到该类。好的。原因2b-子目录路径与FQN不匹配

    如果您的类fqn是com.acme.example.Foon,那么jvm将在目录"com/acme/example"中查找"foon.class":好的。

    • 如果您的目录结构与上述模式中的包命名不匹配,那么JVM将找不到您的类。好的。

    • 如果试图通过移动类来重命名类,那么也会失败…但异常stacktrace会有所不同。好的。

    举一个具体的例子,假设:好的。

    • 你想运行com.acme.example.Foon类,
    • 完整的文件路径是/usr/local/acme/classes/com/acme/example/Foon.class
    • 您当前的工作目录是/usr/local/acme/classes/com/acme/example/

    然后:好的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # wrong, FQN is needed
    java Foon

    # wrong, there is no `com/acme/example` folder in the current working directory
    java com.acme.example.Foon

    # wrong, similar to above
    java -classpath . com.acme.example.Foon

    # fine; relative classpath set
    java -classpath ../../.. com.acme.example.Foon

    # fine; absolute classpath set
    java -classpath /usr/local/acme/classes com.acme.example.Foon

    笔记:好的。

    • 在大多数Java版本中,EDCOX1×9选项可以缩短为EDCOX1×10。检查javajavac等各自的手工输入。
    • 在类路径中选择绝对路径名和相对路径名时要仔细考虑。请记住,如果当前目录发生更改,相对路径名可能会"中断"。

    原因2c-类路径中缺少依赖项

    类路径需要包含应用程序所依赖的所有其他(非系统)类。(系统类是自动定位的,您很少需要关注这一点。)为了正确加载主类,JVM需要找到:好的。

    • 类本身。
    • 超类层次结构中的所有类和接口(例如,见Java类在类路径中出现,但启动错误时出错:无法找到或加载主类)
    • 通过变量或变量声明、方法调用或字段访问表达式引用的所有类和接口。

    (注意:jls和jvm规范允许jvm"延迟"加载类的某些范围,并且当抛出类加载器异常时,这可能会受到影响。)好的。原因3-类已在错误的包中声明

    有时会有人将源代码文件放入源代码树中的文件夹不正确,或者遗漏了package声明。如果您在一个IDE中这样做,IDE的编译器会立即告诉您这一点。类似地,如果使用一个体面的Java构建工具,该工具将以一种检测问题的方式运行EDCOX1×12。但是,如果你用手工构建Java代码,你可以这样做,编译器不会注意到这个问题,而产生的".class"文件不在你期望的位置。好的。还是找不到问题?

    有很多东西要检查,很容易错过。尝试将-Xdiag选项添加到java命令行(这是java之后的第一件事)。它将输出关于类加载的各种信息,这可能为您提供关于实际问题是什么的线索。好的。

    另外,考虑从网站、文档等复制和粘贴不可见或非ASCII字符可能导致的问题。考虑到"同形文字",两个字母或符号看起来是一样的…但不是。好的。java -jar 语法

    用于"可执行"JAR文件的可选语法如下:好的。

    1
      java [ <option> ... ] -jar <jar-file-name> [ ...]

    例如好的。

    1
      java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred

    在这种情况下,入口点类的名称(即com.acme.example.ListUser和类路径在JAR文件的清单中指定。好的。IDE

    一个典型的Java IDE支持在IDE JVM本身或在JavaJVM中运行Java应用程序。这些通常不受这种特殊的异常影响,因为IDE使用自己的机制来构造运行时类路径、标识主类并创建java命令行。好的。

    但是,如果您在IDE后面做一些事情,这个异常仍然可能发生。例如,如果您以前为Eclipse中的Java应用程序设置了一个应用程序启动器,然后您将包含"主"类的JAR文件移动到文件系统中的不同位置,而不告诉Eclipse,Eclipse会无意中用不正确的类路径启动JVM。好的。

    简言之,如果您在一个IDE中遇到这个问题,请检查诸如陈旧的IDE状态、损坏的项目引用或损坏的启动程序配置。好的。

    对于一个IDE来说,也有可能只是混淆了。IDE是由许多交互部分组成的非常复杂的软件。其中许多部分采用了各种缓存策略,以使整个IDE具有响应性。这些有时会出错,一个可能的症状是启动应用程序时出现问题。如果您怀疑这可能发生,那么值得重新启动您的IDE。好的。其他参考文献

    • 从Oracle Java教程——常见问题(及其解决方案)

    好啊。


    如果源代码名是helloworld.java,则编译后的代码将是HelloWorld.class

    如果使用以下方法调用它,则会得到该错误:

    1
    java HelloWorld.class

    相反,请使用:

    1
    java HelloWorld


    如果您的类在包中,那么您必须使用该类的全名(packagename.main class name)来运行cd到主目录。

    例子:

    我的课程在这里:

    1
    D:\project\com\cse\

    我的主要课程的全名是:

    1
    com.cse.Main

    所以我回到主目录:

    1
    D:\project

    然后发出java命令:

    1
    java com.cse.Main


    如果在package中定义了主类和主方法,那么应该使用类的全名(packageName.MainClassName在层次目录中运行它。

    假设有一个源代码文件(main .java):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    package com.test;

    public class Main {

        public static void main(String[] args) {
            System.out.println("salam 2nya
    "
    );
        }
    }

    为了运行此代码,您应该将Main.Class放在类似于目录./com/test/Main.Java的包中。在根目录中使用java com.test.Main


    当相同的代码在一台PC上运行,但在另一台PC上显示错误时,我发现的最佳解决方案是如下编译:

    1
    2
    javac HelloWorld.java
    java -cp . HelloWorld


    帮助我的是在命令行上指定类路径,例如:

  • 创建一个新文件夹,C:\temp

  • C:\temp中创建带有以下类的temp.java文件:

    1
    2
    3
    4
    5
    public class Temp {
        public static void main(String args[]) {
            System.out.println(args[0]);
        }
    }
  • 打开C:\temp文件夹中的命令行,编写以下命令编译temp类:

    1
    javac Temp.java
  • 运行编译后的Java类,添加EDCOX1 OR 4选项,让JRE知道在哪里找到类:

    1
    java -classpath C:\temp Temp Hello!

  • 根据错误消息("找不到或加载主类"),有两类问题:

  • 找不到主类
  • 无法加载主类(此情况在接受的答案中没有完全讨论)
  • 当完全限定的类名中存在拼写错误或语法错误,或者在提供的类路径中不存在时,找不到主类。

    当类无法启动时,无法加载主类,通常主类扩展另一个类,并且该类在提供的类路径中不存在。

    例如:

    1
    public class YourMain extends org.apache.camel.spring.Main

    如果不包括驼簧,将报告此错误。


    有时可能导致这个问题的原因与主班无关,我不得不以一种艰难的方式找到答案。我搬走的是一个参考图书馆,它给了我:

    Could not find or load main class xxx Linux

    我刚刚删除了那个引用,又添加了一次,它再次运行良好。


    在这种情况下,我犯了这样一个错误:

    1
    java -cp lib.jar com.mypackage.Main

    它与用于Windows的;和用于Unix的:一起工作:

    1
    java -cp lib.jar; com.mypackage.Main


    试试- Xdiag。

    SteveC的答案很好地涵盖了可能出现的情况,但有时确定类是否无法找到或加载可能并不容易。使用java -Xdiag(自JDK 7起)。这将打印出一个不错的stacktrace,它提供了消息Could not find or load main class消息的含义提示。

    例如,它可以指向主类使用的其他类,这些类找不到并阻止加载主类。


    使用此命令:

    1
    java -cp . [PACKAGE.]CLASSNAME

    示例:如果您的类名是从hello.java创建的hello.class,则使用以下命令:

    1
    java -cp . Hello

    如果文件hello.java在包com.demo中,请使用以下命令

    1
    java -cp . com.demo.Hello

    对于JDK 8,经常会出现类文件在同一个文件夹中,但是java命令需要类路径,因此我们添加-cp .以当前文件夹作为类路径的引用。


    在这种情况下,您有:

    Could not find or load main class ?classpath

    这是因为您使用的是"-classpath",但是破折号与java在命令提示下使用的破折号不同。我有这个问题从记事本复制粘贴到命令。


    在我的例子中,出现错误是因为我提供了源文件名而不是类名。

    我们需要向解释器提供包含主方法的类名。


    我花了相当多的时间来解决这个问题。我以为我的课堂路径设置不正确,但问题是我输入了:

    1
    java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool

    而不是:

    1
    java -cp C:/java/MyClasses utilities/myapp/Cool

    我认为完全限定的意思是包含完整路径名而不是完整包名。


    在我的案例中解决问题的是:

    右键单击要运行的项目/类,然后单击Run As->Run Configurations。然后,您应该修复现有配置,或者按照以下方式添加新配置:

    打开Classpath选项卡,单击Advanced...按钮,然后添加项目的bin文件夹。


    如果使用maven构建jar文件,请确保在pom.xml文件中指定主类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <build>
        <plugins>
            <plugin>
                maven-jar-plugin</artifactId>
                <configuration>
                   
                        <manifest>
                            <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    这可能会帮助你,如果你的情况是特别像我的:作为初学者,我也遇到了这个问题,当我试图运行一个Java程序。

    我是这样编译的:

    1
    javac HelloWorld.java

    我也试着用同样的扩展名运行:

    1
    java Helloworld.java

    当我删除了.java并重新编写了类似java HelloWorld这样的命令时,程序运行得很好。:)


    首先使用此命令设置路径;

    1
    set path="paste the set path address"

    然后您需要加载程序。在存储的驱动器中键入"cd(folder name)"并编译它。例如,如果我的程序存储在D驱动器上,请键入"D:",然后键入"CD(文件夹名)"。


    enter image description here

    类文件位置:C: estcomcompany

    文件名:main.class

    完全限定类名:com.company.main

    命令行命令:

    1
    java  -classpath"C:\test" com.company.Main

    请注意,类路径不包括comcompany


    这里的所有答案似乎都指向Windows用户。对于mac,类路径分隔符是:,而不是;。由于使用;设置类路径时没有抛出错误,因此如果从Windows到Mac,很难发现这一点。

    下面是对应的mac命令:

    1
    java -classpath".:./lib/*" com.test.MyClass

    在本例中,包是com.test,并且类路径中也包含lib文件夹。


    在Windows上,将.;放在类路径值的开头。

    这个。(dot)表示"在当前目录中查找"。这是一个永久的解决方案。

    也可以使用set CLASSPATH=%CLASSPATH%;.将其设置为"一次性"。只要您的命令窗口打开,这将持续。


    这是一个特定的案例,但是由于我来到这个页面寻找解决方案,但没有找到它,我将在这里添加它。

    Windows(用7测试)不接受类和包名称中的特殊字符(如á)。不过,Linux确实做到了。

    我在netbeans中构建了一个.jar并尝试在命令行中运行它时发现了这个问题。它在netbeans中运行,但不在命令行中。


    使用Windows PowerShell中公布的-cp选项运行java时,可能会出现如下错误:

    1
    The term `ClassName` is not recognized as the name of a cmdlet, function, script ...

    为了让PowerShell接受该命令,-cp选项的参数必须包含在引号中,如下所示:

    1
    java -cp 'someDependency.jar;.' ClassName

    以这种方式形成命令应该允许Java正确地处理类路径参数。


    好吧,已经有很多答案了,但是没有人提到文件权限是罪魁祸首。运行时,用户无权访问JAR文件或路径的某个目录。例如,考虑:

    /dir1/dir2/dir3/myjar.jar中的jar文件

    拥有jar的用户1可以:

    1
    2
    3
    # Running as User1
    cd /dir1/dir2/dir3/
    chmod +r myjar.jar

    但它仍然不起作用:

    1
    2
    3
    # Running as User2
    java -cp"/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
    Error: Could not find or load main class MyProgram

    这是因为正在运行的用户(user2)无权访问dir1、dir2、javalibs或dir3。当用户1可以看到文件并可以访问它们时,它可能会使某些人发疯,但用户2仍然会发生错误。


    您真的需要从src文件夹中执行此操作。在这里键入以下命令行:

    1
    [name of the package].[Class Name] [arguments]

    假设您的类名为CommandLine.class,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package com.tutorialspoint.java;

        /**
         * Created by mda21185 on 15-6-2016.
         */


        public class CommandLine {
            public static void main(String args[]){
                for(int i=0; i<args.length; i++){
                    System.out.println("args[" + i +"]:" + args[i]);
                }
            }
        }

    然后应该将cd转到src文件夹,需要运行的命令如下所示:

    1
    java com.tutorialspoint.java.CommandLine this is a command line 200 -100

    命令行上的输出将是:

    1
    2
    3
    4
    5
    6
    7
    args[0]: this
    args[1]: is
    args[2]: a
    args[3]: command
    args[4]: line
    args[5]: 200
    args[6]: -100


    有时,在一些您可能尝试过的在线编译器中,如果不编写public class [Classname],而只编写class [Classname],则会出现此错误。


    我也有同样的问题,最后发现了我的错误:)我使用这个命令进行编译,它工作正常。

    1
    javac -cp"/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java

    但此命令对我无效(找不到或加载主类qrcode)

    1
    java -cp"/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode

    最后我在类路径的末尾添加了":"字符,问题解决了。

    1
    java -cp"/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode

    )


    在测试Java MangGDB JDBC连接时,我也面临类似的错误。我认为简单地总结我的最终解决方案是很好的,这样以后任何人都可以直接查看这两个命令,并且有利于进一步进行。

    假设您在Java文件和外部依赖项(JAR文件)存在的目录中。

    编译:

    1
    javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
    • -cp-classpath参数;逐个传递所有相关的jar文件
    • *Java--这是Java类文件,它有主方法。SDSD

    运行:

    1
    java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
    • 请在所有依赖JAR文件结束后观察冒号(unix)/逗号(windows)
    • 最后,在没有任何扩展的情况下观察主类名称(NO.class或.java)


    我有一个奇怪的。

    错误:无法找到或加载主类MyPackage.app

    结果发现我在项目的pom.xml(我的项目的pom.xml指向父pom.xml)中有一个pom(父)设置,而relativepath是关闭/错误的。

    下面是我项目的pom.xml的一部分

    1
    2
    3
    4
    5
    6
    <parent>
        <groupId>myGroupId</groupId>
        pom-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../badPathHere/pom.xml</relativePath>
    </parent>

    一旦我解决了POM相对路径,错误就消失了。

    算了吧。


    我在做了mvn eclipse:eclipse后得到了这个错误。这把我的.classpath文件弄得有点乱。

    不得不将.classpath中的行从

    1
    2
    <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
    <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

    1
    2
    <classpathentry kind="src" path="src/main/java" output="target/classes" />
    <classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />

    在Java中,当您有时使用Java可执行文件从命令行运行JVM并试图从具有公共静态空隙main(PSVM)的类文件启动程序时,即使到JVM的类路径参数是准确的并且类文件出现在类路径上,也可能会遇到下面的错误:

    1
    Error: main class not found or loaded

    如果无法加载带有psvm的类文件,就会发生这种情况。一个可能的原因是类可能正在实现接口或扩展不在类路径上的另一个类。通常,如果一个类不在类路径上,则抛出的错误会指示为这样。但是,如果使用中的类被扩展或实现,Java就无法加载类本身。

    参考:https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/


    在我的例子中,我得到了错误,因为我在Windows7系统上混合了大小写包名称。将包名称更改为所有小写可以解决此问题。还要注意,在这个场景中,我没有将.java文件编译成.class文件;它不会从相同的子子目录运行。


    我无法用这里所述的解决方案来解决这个问题(尽管所述的答案无疑澄清了我的概念)。我曾两次面对这个问题,每次尝试不同的解决方案(在EclipseIDE中)。

    • 首先,我在我的项目的不同类中遇到了多个main方法。所以,我从后面的类中删除了main方法。
    • 其次,我尝试了以下解决方案:
    • 右键单击我的主项目目录。
    • 头到源,然后清理和坚持默认设置和完成。完成一些后台任务后,您将被定向到主项目目录。
    • 在那之后,我关闭了我的项目,重新打开它,然后轰隆一声,我终于解决了我的问题。


    如果此问题与Eclipse相关:

    尝试将项目添加到类路径。

    见下图:

    enter image description here

    这种方法对我很管用。


    在IDE开发(Eclipse、NetBeans或其他)的上下文中,您必须将项目属性配置为拥有一个主类,这样当您点击"Play"时,您的IDE就知道要执行的主类位于何处。

  • 右键单击项目,然后单击属性
  • 转到"跑步"类别并选择您的主要课程
  • 点击run按钮。
  • Enter image description here


    有时,最好删除添加的JAR文件,并使用适当的构建帮助再次添加。对我来说,这是一个经常性的问题,我采用了同样的方法:

  • 将所有引用的JAR文件放在jaradons文件夹中,并将其复制到安全的地方。
  • 现在从Eclipse(或者从您的IDE)中删除JAR文件。
  • 将整个项目文件夹从工作区移到安全位置
  • 重新启动Eclipse(您的IDE)
  • 现在从安全位置导入项目目录。
  • 从jaradons文件夹(以前保存在安全位置)将jar文件添加到项目中。
  • 项目构建路径,添加JAR文件并应用
  • 现在运行项目。它不应该显示错误。

  • 默认情况下,Java使用EDCOX1 OR 0(当前工作目录)作为默认EDCOX1引用1引用。这意味着,当您在提示下键入命令时,例如java MyClass时,该命令将被解释为您键入java -cp . MyClass。你看到-cpMyClass之间的点了吗?(cp是longer classpath选项的缩写)

    对于大多数情况来说,这已经足够了,而且在您试图向您的CLASSPATH添加一个目录之前,一切似乎都正常。在大多数情况下,当程序员需要这样做时,他们只是运行一个类似于set CLASSPATH=path\to\some\dir的命令。此命令创建一个名为CLASSPATH的新环境变量,该变量的值为path\to\some\dir,或者如果之前已经设置了CLASSPATH,则将其值替换为path\to\some\dir

    当这样做时,您现在有一个EDCOX1×1环境变量,Java不再使用它的默认类路径(EDCOX1×0),而是设置了一个默认的类路径。所以第二天,你打开编辑器,编写一些Java程序,EDOCX1,14,到你保存的目录,编译它,并尝试用EDOCX1,2的命令运行它,并且你得到一个很好的输出:找不到或者加载主类…(如果您的命令以前工作得很好,现在得到了这个输出,那么您可能就是这样)。

    所发生的是,当运行命令java MyClass时,Java在EDCOX1 1中设置的目录或目录中搜索名为EDCOX1×5的类文件,而不是您当前的工作目录,因此在那里找不到您的类文件,因此抱怨。

    您需要做的是将.再次添加到类路径中,这可以通过命令set CLASSPATH=%CLASSPATH%;.来完成(注意分号后面的点)。用简单的英语,这个命令说"选择最初的CLASSPATH(%CLASSPATH%的值),将.添加到它(;.的值),并将结果分配回CLASSPATH"。

    瞧,你又能像往常一样使用你的命令了。


    右键单击项目。

  • 选择"打开模块设置"
  • 将SRC文件夹标记为"源"
  • 转到编辑配置,然后选择主类
  • 单击"确定"或"应用"按钮
  • 这对我有用。谢谢


    关于外部库的回答-

    编译:

    1
    javac -cp ./<external lib jar>: <program-name>.java

    执行:

    1
    java -cp ./<external lib jar>: <program-name>

    上述方案在OSX和Linux系统中运行良好。注意:在类路径中


    似乎当我遇到这个问题时,它是独一无二的。

    一旦我删除了文件顶部的包声明,它就完美地工作了。

    除此之外,似乎没有任何方法在我的计算机上运行简单的helloworld.java,不管编译发生在哪个文件夹中,从哪个类路径、路径、参数或文件夹调用。


    解决"无法加载主类错误"

    在读了所有的答案之后,我发现大多数答案都不适合我。所以我做了一些研究,这就是我得到的。只有在步骤1不起作用时才尝试此操作。

  • 尝试安装JRE 32或64。如果不起作用,
  • 打开到C:程序文件(x86) Java或c:程序文件java

    • i.打开jdk文件夹,然后打开bin文件夹。
    • 二。复制路径并将其添加到环境变量中。确保使用分号;分隔变量。例如,"C:AyGato to bin;C:javain;如果不这样做,将会导致更多的错误。

    • iii.转到jre文件夹,打开其bin文件夹。

    • 在这里搜索rt.jar文件。我的是:


      C:\Program Files (x86)\Java\jre1.8.0_73\lib
      t.jar
      Copy and under environment variable and search for the classpath variable
      and paste it there.

    • v.现在重新启动命令并再次尝试运行。错误将消失。
    • 我将发布一个链接到我的YouTube视频教程。

  • 对于数据库连接,我得到了这个。我刚刚在类路径中添加了以下内容:

    1
    export CLASSPATH=<path>/db2jcc4.jar:**./**

    在这里我附加了./在最后,这样我的类在加载时也可以被识别。

    现在运行:

    1
    java ConnectionExample

    它工作得很好。


    在我的例子中,我只是在Eclipse中更改JRE。请找到所附的屏幕截图。