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
--->类文件在目录demo [A.class,B.class]
中创建Run : d:\java>java B
Error: could not find or load main class B
但如果我删除第1行[package demo;]而不是它正常运行。 所以,当我们使用包名而不是为什么“错误:无法找到或加载主类B”时会产生错误。
答案 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
这将创建一个名为" demo"的文件夹。其中包含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类所在的包的名称。