“Could not find or load main class” Error while running java program using cmd prompt
我正在运行一个简单的"地狱世界"程序。我在命令提示符中得到这个错误:
Could not find or load main class
HelloWorld .
我已经在系统中设置了
我的示例程序如下:
1 2 3 4 5 6 7 |
当主类位于包中时,您需要按如下方式运行它:
1 | java <packageName>.<MainClassName> |
在您的情况下,您应该按如下方式运行程序:
1 | java org.tij.exercises.HelloWorld |
你的
可能是这样的:
1 | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar |
我想你的价值不包括这个
所以,加上它。完成后,重新启动命令
这可能奏效。
例如,文件
现在,您在命令行的路径
1 | javac org/yz/test/HelloWorld.java |
然后,键入此命令以运行它:
1 | java org.yz.test.HelloWorld |
你可以得到你想要的。
我把
所以我移回主目录并执行:
它起作用了,即:
世界你好!!
因为您是从命令提示符运行它,所以需要确保您的类路径是正确的。如果已经设置了它,则需要重新启动终端以重新加载系统变量。
如果不使用EDCOX1×24和EDCOX1×19 },EDOCX1不被设置为0,则使用当前目录(EDCOX1,15,15),但是当运行EDCOX1,28个文件时,您需要在包含Java包名称文件夹的文件夹中。
因此,在
1 2 3 | java -cp target/classes com.foo.app.App CLASSPATH=target/classes java com.foo.app.App cd target/classes && java com.foo.app.App |
您可以通过打印
- Linux:
echo $CLASSPATH - 窗口:
echo %CLASSPATH% 。
分录以
请参见:我如何运行Java.class文件?
我也有同样的问题,我的有点不一样,尽管我没有一个包名。我的问题是类路径,例如:
1 | C:\Java Example>java -cp . HelloWorld |
Java的EDOCX1 19选项,从我的经验中可以看出(不多),但是我遇到了20次尝试不同方法的错误,直到我声明类路径I接收到相同的错误。维斯朗说的没错。表示当前目录。
如果您需要更多关于Java选项的信息,请输入EDCOX1、20或EDCOX1×21,我认为选项不是可选的。
我刚刚做了更多的研究,我发现了一个详细介绍
1 2 | // Set CLASSPATH to the current directory '.' prompt> set CLASSPATH=. |
添加新的环境设置时,需要在启用变量之前重新启动。但是从命令提示可以设置它。它也可以像我在开头提到的那样设置。有关更多信息,如果您使用不同的操作系统,请检查:环境变量。
此错误的一个原因可能是
Could not find or load main class
也许你用你的类名作为不同的名字,用另一个名字保存类名,你可以用类名保存另一个名字的Java源文件名。例如:
你可以存为
编制:
这将在同一位置自动生成.class文件。
现在运行:
在运行Java类时忘记了.class扩展,我得到了完全相同的错误。因此,不要这样:
1 | java myClass.class |
应该这样做:
1 | java myClass |
我在Win 10上运行Java时遇到了类似的问题。
而不是
1 2 |
跑
1 2 | $ java hello Hello, World |
使用EDCOX1 OR 14命令执行Java程序。
当您声明了包时,此命令将起作用。
我用intellij创建了我的.jar,其中包括一些库中未打包的jar。其中一个jar在清单中有一些已签名的内容,阻止加载.jar。没有警告,或其他什么,只是不起作用。
移除包含清单的未打包的jar将其修复。
创建一个文件夹org/tij/exercises,然后移动helloworld.java文件。然后在命令下运行
1 | javac -cp . org/tij/exercises/HelloWorld.java |
和
1 | java -cp . org/tij/exercises/HelloWorld |
对我们很多人来说,至少对我来说,我认为类路径层次结构是不直观的,因为我在一个目录结构中工作,感觉应该是这样的。
Java是基于它的包路径来查找类的名称,而不仅仅是文件路径。
如果:我在本地目录中。/packagefoo/mainclass,或者向上的目录/packagefoo/,或一个向下。/PackageFoo/Mainclass/Foo。
命令"JavaPaseFoo.MainClass"正在从根%CassPAT%运行,这意味着对Java有意义。然后,它从那里遍历包名,而不是像我们普通编码人员所期望的那样的路径名。
因此,如果我的类路径设置为%CWD%/,那么"JavaPaseFoo.MainClass"将起作用。如果我将classpath设置为%cwd%/packagefoo/,则找不到packagefoo.mainclass。"java MainClass"总是指"包"中的成员,直到我撕开Java代码"包PACKAGEFO",然后将类文件移动到一个目录。
实际上,如果我将"package packagefoo;"更改为"package foopackage;",我必须在classpath/foopackage或foopackage下创建一个子文件夹。mainClass将停止工作。
更糟糕的是,在path、classpath、javahome、for windows、jdeveloper、oracle数据库和它安装的每个用户名之间,我认为一个试图快速获得某些东西的编码人员最终会强行使用路径变量和结构,直到某个东西在不理解其含义的情况下工作。
至少我做到了。
面临同样的问题。通过以下步骤解决
- 转到包含"org.tij.exercises"包的目录(例如:在Eclipse中,它可能是您的SRC文件夹)
- 使用
java org.tij.exercises.HelloWorld 。
我也面临同样的问题,尝试了这里提到的所有方法。问题是在类创建之后,我没有在Eclipse中刷新我的项目。一旦我刷新了它,事情就如预期的那样工作。