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