我正在运行一个简单的“HelloWorld”计划。我在命令提示符中收到此错误:
无法找到或加载主要课程
HelloWorld
。
我在系统中设置了CLASSPATH
和PATH
变量。在cmd
提示符下,我从保存HelloWorld
程序的目录运行。我可以看到类名和文件名相同,并且在同一目录中创建了.class
文件。还有什么可能是问题?
我的示例程序如下所示:
package org.tij.exercises;
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World!!");
}
}
答案 0 :(得分:38)
当Main类在包中时,您需要按如下方式运行它:
java <packageName>.<MainClassName>
在您的情况下,您应按如下方式运行程序:
java org.tij.exercises.HelloWorld
答案 1 :(得分:18)
您的CLASSPATH
值是什么?
看起来像这样:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
我猜您的值不包含此.;
。
所以,添加IT 完成后,重新启动 CMD
这可能有效。
例如,文件HelloWorld.java
位于路径中:D:\myjavatest\org\yz\test
且其package
为:org.yz.test
。
现在,您已经在CMD专线的D:\myjavatest\
路径上了
输入以编译它:
javac org/yz/test/HelloWorld.java
然后,输入以运行它:
java org.yz.test.HelloWorld
你可能得到你想要的东西。
答案 2 :(得分:12)
我从bin
删除了CLASSPATH
。我发现我正在从java
所在的目录执行HelloWorld.java
命令,即:
C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld
所以我搬回主目录并执行:
java org.tij.exercises.HelloWorld
它有效,即:
C:\Users\xyz\Documents\Java\javastudy\src>java org.tij.exercises.HelloWorld
Hello World !!
答案 3 :(得分:4)
由于您是从命令提示符运行它,因此需要确保classpath正确无误。如果已经设置,则需要重新启动终端以重新加载系统变量。
如果未使用-classpath
和-cp
并且未设置CLASSPATH
,则使用当前目录(.
),但运行.class
个文件时,您需要位于包含Java package name个文件夹的文件夹中。
因此,.class
中有./target/classes/com/foo/app/App.class
个文件,您有以下几种可能:
java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App
您可以打印CLASSPATH
变量:
echo $CLASSPATH
echo %CLASSPATH%
其条目以:
分隔。
答案 4 :(得分:3)
此错误的一个原因可能是
无法找到或加载主要课程
<class name>
也许您使用您的类名作为其他名称,并使用其他名称保存类名,您可以使用除类名之外的其他名称保存Java源文件名。例如:
class A{
public static void main(String args[]) {
System.out.println("Hello world");
}
}
您可以另存为Hello.java
,但
编译:{{1}}
这将在同一位置自动生成A.class文件。
现在运行:javac Hello.java
答案 5 :(得分:3)
我有同样的问题,虽然我没有包名,但我有点不同。我的问题是类路径,例如:
C:\Java Example>java -cp . HelloWorld
Java的-cp
选项以及我从我的经验中可以看出的(不多)但是我遇到了大约20次尝试不同方法的错误,直到我声明类路径我收到相同的错误。 Vishrant说明的是正确的。代表当前目录。
如果您需要有关java选项的更多信息,请输入java -?
或java -help
我认为这些选项不是可选的。
我刚做了一些研究,我发现了一个详细介绍CLASSPATH
的网站。必须将CLASSPATH
设置为环境变量;到当前目录&lt;。&gt;。您可以从windows中的命令行进行设置:
// Set CLASSPATH to the current directory '.'
prompt> set CLASSPATH=.
添加新环境设置时,需要在启用变量之前重新启动。但是从命令提示符处可以设置它。它也可以像我在开头提到的那样设置。有关详细信息,如果您使用其他操作系统,请检查:Environment Variables。
答案 6 :(得分:2)
使用java -d . HelloWorld
命令执行Java程序。
当您声明包时,此命令有效。
.
代表当前目录/。
答案 7 :(得分:2)
在win10上运行java时遇到了类似的问题
而不是
$ java ./hello
Error: Could not find or load main class ..hello
运行
$ java hello
Hello, World
答案 8 :(得分:2)
在运行JAVA类时忘记删除 .class 扩展名时,我得到了完全相同的错误。所以不要这样:
java myClass.class
应该这样做:
java myClass
答案 9 :(得分:0)
我遇到了同样的问题,并尝试了这里提到的一切。 事情是我在课堂创建后没有在eclipse中刷新我的项目。 一旦我精神焕发,事情就会按预期发挥作用。
答案 10 :(得分:0)
面临同样的问题。通过以下步骤解决
java org.tij.exercises.HelloWorld
答案 11 :(得分:0)
对于我们很多人,至少对我来说,我认为类路径层次结构并不直观,因为我在目录结构中工作,感觉应该是它。
Java正在根据它的包路径查看类的名称,而不仅仅是文件路径。
如果符合以下条件并不重要: 我在本地目录./packagefoo/MainClass,或 一个目录./packagefoo/,或 一个下来./packagefoo/MainClass/foo。
命令&#34; java packagefoo.MainClass&#34;正在运行根%CLASSPATH%,这意味着Java的重要性。然后从那里它遍历包名,而不是像我们这样的编码人员期望的路径名。
因此,如果我的CLASSPATH设置为%CWD%/,那么&#34; java packagefoo.MainClass&#34;将工作。 如果我将CLASSPATH设置为%CWD%/ packagefoo /,则无法找到packagefoo.MainClass。 始终&#34; java MainClass&#34;如果它是&#34; package&#34;的成员,则直到我删除java代码&#34; package packagefoo;&#34;并将类文件移动到目录中。
事实上,如果我改变&#34;包packagefoo;&#34; to&#34;包装foopackage;&#34;我必须在CLASSPATH / foopackage或foopackage下创建一个子文件夹.MainClass再次停止工作。
更糟糕的是,在PATH,CLASSPATH,JAVAHOME,Windows,JDeveloper,Oracle数据库以及它所安装的每个用户名之间,我认为编程器试图快速获取某些东西最终会破坏强制路径变量和结构,直到某些东西有效而不理解它意味着什么。
至少我做到了。答案 12 :(得分:0)
创建一个文件夹org / tij / exercises,然后移动HelloWorld.java文件。然后在命令下运行
var query = `
select department_id, department_name from departments
where
(department_id = :id_dep or :id_dep is null)
and
(department_name = :name_dep or :name_dep is null)
`;
var binds =
{id_dep: req.body.id_dep
,name_dep: req.body.name_dep}
;
AND
javac -cp . org/tij/exercises/HelloWorld.java
答案 13 :(得分:0)
我使用IntelliJ创建了.jar,其中包括我库中一些未包装的jar。这些罐子之一在清单中有一些签名的东西,阻止了.jar的加载。没有警告或其他任何东西,只是行不通。 Could not find or load main class
删除装有清单的拆开的罐子,将其固定。
答案 14 :(得分:0)
我面临类似的问题,但这是由于文件目录中的空格字符保留了Java类。
下面给出的方案以及解决方案:
public class Sample{
public static void main(String[] args) {
System.out.println("Hello world, Java");
}
}