0

我一直在网上搜索试图找到我的问题的答案,但是对于像我这样的初学者来说,我所看到的任何地方似乎都有一个过于复杂的解决方案。我一直在做这个项目,现在才意识到我应该制作一个包,或者类似的东西。但问题是,在我开始涉足之前,我的程序运行良好,但现在它根本无法运行。我收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: BubbleSort. class
Caused by: java.lang.ClassNotFoundException: BubbleSort.class
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:672)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
        at ``java.lang.ClassLoader.loadClass(ClassLoader.java:638)
Could not find the main class: BubbleSort.class.  Program will exit.

如果我没记错的话,这就是我的“路径”的样子。我通过远程连接连接到我学校的 Z: 驱动器,从那里我有一个名为 myFirstname_Lastname_A4 的文件夹,然后将我带到另一个名为 sortzz 的文件夹,我认为它应该只有我的源文件,但它也结束了每当我编译时,我的类文件就在那里。所以这就是我正在做的编译。

 cd myFirstname_Lastname_A4/sortingzz

javac *.java(工作正常,这是我在我的sortingzz文件夹中结束我的类文件的地方)

java *(这是我得到错误的地方)

我很确定我只是试图错误地运行程序。在我开始处理我还没有准备好的东西之前,我曾经只是运行带有我的 main 函数的文件,就像这样

javac SortingImplementation.java

java SortingImplementation

这在大多数情况下工作得很好,但我开始无法从其他类调用某些类,所以当我发现我应该做打包和导入的东西时。

如果这是问题,我在每个源文件的第一行都有:包排序zz;

我正在像这样导入:

import sortingzz.*;

这是正确的,对吧?

更新:

我决定放弃类路径并尝试打包所有内容,因为像往常一样,我收到的回复超出了我的想象,老实说,我认为没有必要。

在删除包并从所有内容中导入后,再次使用 javac *. 编译,这次它实际上编译了。但是,每当我尝试使用其中的主要内容 SortingImplementation 运行我的课程时,它都会告诉我

Could not find the main class: SortingImplementation.  Program will exit.

我不明白,我现在正在查看 SortingImplementation.class 以及所有其他类和 java 文件,所以我不确定它在做什么。

4

4 回答 4

1

您说您正在使用包来组织课程。在这种情况下,您需要使用-cp标志设置类路径。

javac -cp /path/to/parent/of/package classname.java

java classname

此外,您的主类应该被声明public并且应该有一个main()

于 2013-11-14T19:48:47.607 回答
1

javac *.java很好。这将编译您的文件。但是,您只需要运行包含 main 方法的文件:java MainClass

于 2013-11-14T19:46:14.510 回答
0

commancjavac *.java将所有找到的 java 文件编译为相应的.class文件。如果你所有的类文件都在同一个文件夹中,他们应该这样做,你只需运行你的常规java SortingImplementation命令。

java *取决于您的操作系统,会在不需要的命令中产生。例如,在 Linux 上,它会被操作系统扩展为java SortingImplementation.java SortingImplementation.class BubbleSort. 最后一个是目录,当然不是可执行类。

于 2013-11-14T20:05:48.370 回答
0

NoClassDefFoundError 当类在编译时被识别但在运行时不可用时发生。所以JVM在类路径中找不到你的类。

使用 -cp 标志来指定你的包应该在哪里工作。

于 2013-11-14T19:57:49.720 回答