错误:无法找到或加载主类<class name =“”>

时间:2015-09-27 11:42:58

标签: java main

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

---&GT;类文件在目录demo [A.class,B.class]

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

但如果我删除第1行[package demo;]而不是它正常运行。 所以,当我们使用包名而不是为什么“错误:无法找到或加载主类B”时会产生错误。

4 个答案:

答案 0 :(得分:2)

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

>java demo/A

此外,你似乎在B级有主要方法。所以你必须执行class B而不是A

>java demo/B

答案 1 :(得分:2)

运行此命令。因为main方法是 B class 。包的名称为demo,包含main方法的类为B

java demo.B

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

  

但如果我删除第1行[package demo;]而不是正确运行。

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

答案 2 :(得分:0)

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

public class B

而不是

class B

假设B.class位于C:\

要编译B.java,请键入

C:\javac -d . B.java

这将创建一个名为&#34; demo&#34;的文件夹。其中包含2个名为A.class和B.class的类文件。

要执行该程序,请键入

C:\demo\java demo.B

这是该计划的结果:

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

答案 3 :(得分:0)

假设您的类位于控制器包中。如果您使用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
}

注意:控制器是我的包的名称。我的类位于控制器包中,它运行良好,甚至作为独立应用程序执行。请记住更改Main类所在的包的名称。