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类所在包的名称。