error: could not find or load main class <class Name>

error: could not find or load main class <class Name>

package demo;
import java.io.*;
class A
{
    public void run()
    {
        System.out.println("This Is Class A : public void run()");
    }
}
class B
{
    public static void main(String args[])
    {
        System.out.println("Main Method Executed");
        A obj1 = new A();
        obj1.run();
    }
}

编译:

d:\java>javac -d . demo.java

---> class 文件被创建在目录 demo [A.class, B.class]

Run : d:\java>java B
Error: could not find or load main class B

但如果我删除第 1 行 [package demo;] 则 运行 正确。 所以,当我们使用包名时,为什么会产生 "Error: could not find or load main class B" 错误。

它应该如下所示,因为您已经声明了一个包结构并且 class 文件应该位于这样的文件夹结构中。因为你的 A.class 应该在演示文件夹中

>java demo/A

而且你似乎在 class B 中有 main 方法。所以你必须执行 class B 而不是 A

>java demo/B

您应该将 demo.java 重命名为 B.java 并使用

public class B

而不是

class B

假设B.class位于C:\

编译B.java,输入

C:\javac -d . B.java

这将创建一个名为 "demo" 的文件夹,其中包含 2 个名为 A.class 和 B.class.

的 class 个文件

要执行程序,请键入

C:\demo\java demo.B

程序结果如下:

Main Method Executed
This Is Class A : public void run()

运行这个命令。因为main方法在Bclass中。包的名称是 demo 和 class 包含主要方法是 B.

java demo.B

输出:
执行的主要方法
这是 Class A : public void 运行()

but if I remove the line 1 [package demo;] than it run proper.

这是因为当您在程序中提供包声明时,您的 classes 就驻留在包中。所以你需要提供完整的路径来从你的包中访问它们。

假设您的 Main class 位于 controller 包中。如果您使用 Gradle 构建和测试您的应用程序,请确保您的 build.gradle 文件中包含这些行:

jar {
    manifest {
      def classpath = configurations.runtime.collect { jarfile ->
        '../lib/' + jarfile.getName()
      }.join(' ')

       attributes 'Main-Class': 'controller.Main', 'Class-Path': classpath, 'Implementation-Version': version
    }
}

task runit(type: JavaExec) {
    main 'controller.Main'
    classpath = sourceSets.main.runtimeClasspath
}

注意:controller是我的包名。我的 Main class 位于 controller 包内,它运行良好,甚至可以作为独立应用程序执行。请记住更改 Main class 所在的包的名称。