因此,当我尝试从命令提示符打开一个不在包中的 java 类时,一切正常,但是当我尝试打开包中的类时,它会给我 NoClassDefFoundError 。 当我尝试打开类(java somepackage/someclass)时列出包时,它说它无法加载或找到主类。
有什么帮助吗?
我可以推断,你有两门课:
测试.java:
// no package defined here
class Test{
public static void main(String[] args){
System.out.println("Test");
}
}
因此您可以使用以下命令编译并运行它:
javac Test.java
java Test
另一堂课:
测试.java:
package test; // package defined here
class Test{
public static void main(String[] args){
System.out.println("Test");
}
}
因此做同样的事情会给你带来错误。 为此,您需要位于终端或 cmd 中“test”文件夹的父目录中并使用:
java test.Test
编译器没有问题。您可以像往常一样使用“test”文件夹中的 javac Test.java 进行编译。
NoClassDefFoundError 意味着你的 JVM 在运行时找不到你的类。这可能是因为它不可见(设置为私有或受保护,或者只是没有访问修饰符)。
它也可能从您的构建路径中丢失
我假设的是,例如,您正在创建一个包和其中的一个类。
包 com.vishwa.hello.commandLineArgs;
公共类 ComandLineArguments {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < args.length; i++) {
System.out.println("Command line arg is "+args[i]);
}
}
}
当我尝试在命令提示符(来自包文件夹)中编译并运行上述代码时 javac ComandLineArguments.java。 java CommandLineArguments 123 456.
您收到以下错误: 错误:无法找到或加载主类 ComandLineArguments 导致:java.lang.NoClassDefFoundError:com/vishwa/hello/commandLineArgs/ComandLineArguments(错误名称:ComandLineArguments)
有两种方法可以解决这个问题:
转到项目的根路径,然后运行。
java com/vishwa/hello/commandLineArgs/ComandLineArguments 123 456
789.
命令行参数是 123。
命令行参数是 456。
命令行参数是 789。
如果要从包目录运行程序,则需要指定类路径以及完整的包 参考。 java-cp /用户/16399/文档/workspace-spring-tool-suite-4-4.12.1.RELEASE/CoreJava/src/ com/vishwa/你好/commandLineArgs/ComandLineArguments 123 456 789。 命令行 arg 是 123。命令行 arg 是 456。命令行 arg 是 789。
package pkg1;
public class Dataguise{
public static void main(String [] args){
System.out.println("My name is Maninder Singh");
}
}
假设这是我的代码。我的包名称是pkg1。
javac Dataguise.java
命令Dataguise.class
文件并将该文件移动到 pkg1
文件夹pkg1.Dataguise
命令 - 它会起作用。我也遇到了同样的问题,所以分享我的经验。