错误:找不到或加载主类<类名>


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"的错误

执行命令。因为main方法在B类中。包名称为demo,包含main方法的类名称为B

java demo.B

输出:


主方法执行
这是类A: public void run()

但如果我删除第1行[package demo;],它会正常运行。

这是因为当您在程序中提供包声明时,那么您的类就驻留在包中。因此您需要提供从包中访问它们的完整路径。

应该如下所示,因为您声明了一个包结构,并且类文件应该驻留在这样的文件夹结构中。在你的a类应该在demo文件夹

>java demo/A

似乎你在类b中有main方法,所以你必须执行类 b而不是A

>java demo/B

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

public class B

代替

class B

假设b类位于C:

编译B.java,输入

C:javac -d . B.java

这将创建一个名为"demo"的文件夹,其中包含两个名为a .class和B.class的类文件。

要执行程序,键入

C:demojava demo.B

下面是程序的结果:

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

假设Main类驻留在controller包中。如果你正在使用Gradle来构建和测试你的应用程序,那么确保在你的构建中有这些行。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类位于controller包中,它工作得很好,甚至可以作为一个独立的应用程序执行。请记住更改Main类所在包的名称。

相关内容

  • 没有找到相关文章

最新更新