我一直在网上试图找到我的问题的答案,但我看到的每个地方似乎都有像我这样的初学者太复杂的解决方案。我一直在研究这个项目,刚才意识到我应该做一个包,或类似的东西。事情是,我的程序工作正常,直到我开始涉足它,现在它根本不起作用。我收到了这个错误:
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的文件夹, 然后我引导我到另一个名为sortingzz的文件夹,我认为它应该只有我的源文件,但每当我编译时它也会在那里结束我的类文件。所以这就是我要编译的内容。
cd myFirstname_Lastname_A4/sortingzz
javac *.java
(工作正常,这是我最终在我的sortingzz文件夹中的Class文件的地方)
java *
(这是我收到错误的地方)
我很确定我只是试图运行程序错误。在我开始讨论我还没准备好的东西之前,我曾经只用我的main函数运行该文件,就像这样
javac SortingImplementation.java
java SortingImplementation
而且大多数情况下工作正常,但是我开始无法从其他类调用某些类,所以当我发现我想要进行打包和导入时。
如果是问题,我在每个源文件的顶行: package sortingzz;
我正在这样导入:
import sortingzz.*
;
这是对的,对吧?
更新:
我决定放弃课堂上的路径并试图打包所有东西,因为像往常一样,我得到的反应超出了我的想法,说实话我认为没有必要。
删除包并从所有内容导入后,再次使用javac *。进行编译后,它实际上编译了这一次。但是每当我尝试使用main中的main运行我的类SortingImplementation时,它会告诉我
Could not find the main class: SortingImplementation. Program will exit.
我不明白,我现在正在查看SortingImplementation.class以及所有其他类和java文件,所以我不确定它正在尝试做什么。
答案 0 :(得分:1)
javac *.java
没问题。这将编译您的文件。但是,您只需要在其中使用main方法运行该文件:java MainClass
答案 1 :(得分:1)
您说您正在使用包来组织类。在这种情况下,您需要使用-cp
标志设置类路径。
javac -cp /path/to/parent/of/package classname.java
和
java classname
此外,您的主要类应声明为public
,并且应该有main()
答案 2 :(得分:0)
在编译时识别类但在运行时期间不可用时,会发生NoClassDefFoundError。 因此JVM无法在类路径中找到您的类。
使用-cp标志指定包的工作位置。
答案 3 :(得分:0)
commanc javac *.java
将所有找到的java文件编译为相应的.class
文件。如果您的所有类文件都在同一个文件夹中,那么您只需运行常规java SortingImplementation
命令。
java *
会产生不合需要的命令。例如,在Linux上,操作系统会将其扩展为java SortingImplementation.java SortingImplementation.class BubbleSort
。最后一个是目录,其中的目录不是可执行类。