"main"线程中的异常java.lang.NoClassDefFoundError

5
package pack;


public class sample{ 

 public static void main(String input[])
    {

        NumberFormat numberFormat = new DecimalFormat("#,##0.00##");
    System.out.println(numberFormat.format(44533125.00));

    } 
}

代码在当前目录(c:/myprogram/)中工作正常。

然后我将sample.class文件复制并粘贴到其他目录(d:/myprogram),运行时出现错误,如下:

Exception in thread "main" java.lang.NoClassDefFoundError: sample (wrong name: pack/sample)

在Java中,.class文件可以在任何地方运行,对吗?但为什么我无法运行呢?


4
为什么这是一个社区维基页面? - mohdajami
3个回答

18

你应该将类文件放在包内 - 因此它应该在名为pack的目录中。然后,在类路径中使用父目录时,您可以运行:

java pack.sample

顺便提一下,为了符合惯例,您还应将类名更改为Sample,并运行pack.Sample

如果您正在使用javac进行构建,请指定“-d”选项,告诉它基本目录,如果需要,它将创建适当的包结构。例如:

javac -d classes Sample.java
或者
javac -d classes src/pack/Sample.java

(两种情况下)都会创建

classes/pack/Sample.class

你随后可以运行

java -cp classes pack.Sample

0

IntelliJ和其他IDE可能不会重构您的运行/调试配置。您必须手动更改主类名称之前的包名称。例如,将“sample.Main”更改为“com.company.package.ui.Main”,以便在下次尝试运行时正确启动。

IDE可能已经用红叉标记了运行/调试按钮,因为它找不到主类。当您打开运行/调试配置时,它还会发出警告。


-1

如果您没有使用单个java/class文件,您也可以删除包语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接