新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。

这意味着什么,是什么导致的,你应该如何解决?


当前回答

关于外部库的回答-

编译:

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

执行:

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

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

其他回答

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

java -cp lib.jar com.mypackage.Main

它与以下各项一起工作:;对于Windows和:对于Unix:

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

使用关键字“package”

如果源代码中有package关键字(主类在包中定义),则应使用类的全名(packageName.MainClassName)在分层目录中运行它。

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

package com.test;

public class Main {

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

要运行此代码,应将Main.Class放在类似于包的目录中:

C: \Users\workspace\testapp.com\test\Main.Java

然后将终端的当前目录更改为项目的根目录:

cd C:\Users\workspace\testapp

最后,运行代码:

java com.test.Main

没有关键字“package”

如果您的源代码名称中没有任何包,那么可能是您使用了错误的命令。假设您的Java文件名为Main.Java,编译后:

javac Main.java

编译后的代码将是Main.class

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

java Main.class

相反,请使用以下方法:

java Main

我以为我不知怎么设置了错误的类路径,但问题是我键入了:

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

而不是:

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

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

关于外部库的回答-

编译:

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

执行:

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

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

如果使用IntelliJ并在从IDE运行main方法时出错,只需确保类位于java包中,而不是kotlin中