[英]Could not find or load main class com.johnathanmarksmith.gradle.HelloWorld
[英]Could not find main class HelloWorld
我在以下文件夹C:\\Program Files\\Java
安装了Java 1.7.0。 我的操作系统是带有Service Pack 3的Windows XP(版本2002)。
我设置的环境变量是:
CLASSPATH : C:\\Program Files\\Java\\jdk1.7.0\\jre\\lib\\rt.jar;
路径: C:\\Program Files\\Java\\jdk1.7.0\\bin;
JAVA_HOME : C:\\Program Files\\Java;
我在这里介绍了我系统中的类名。
接下来我写了一个程序HelloWorld.java:
import java.io.*;
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
当我使用javac HelloWorld.java
进行编译时,编译正常。
但是在我发布java HelloWorld
之后,我遇到了以下错误:
Error: Could not find main class HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:198)
Caused by: java.lang.ClassNotFoundException: HelloWorld
at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
at java.lang.ClassLoader.loadClass(ClassLoader.java:422)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
at java.lang.ClassLoader.loadClass(ClassLoader.java:355)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)
经过一番搜索,我发现环境变量可能有问题。 我试着玩这个,但没有运气。
我甚至重新启动机器,然后我再次尝试运行,但同样的命运。
告诉它在哪里找你上课:它在“。”中,这是当前目录:
java -classpath . HelloWorld
在这种情况下,无需设置JAVA_HOME
或CLASSPATH
您没有设置包含已编译类的类路径! 如果你不告诉它在哪里看, java
找不到任何类。
java -cp [compiler outpur dir] HelloWorld
顺便说一句,您不需要按照自己的方式设置CLASSPATH。
只需从环境变量中删除“classpath”即可。 然后尝试运行:
java HelloWorld
这应该工作正常。
Java没有找到编译的类文件(HelloWorld.class)的位置。 它使用CLASSPATH
环境变量中的目录和JAR文件来搜索运行java.exe时是否给出了-cp
或-classpath
选项。
您不需要CLASSPATH
的rt.jar,这些仅适用于旧版本的Java。 您可以将其保留为未定义,并使用当前工作目录,或者只是添加.
(单点),用';'分隔,到CLASSPATH
变量,表示当前目录:
CLASSPATH: .;C:\\...\\some.jar
或者,您可以使用-cp
或-classpath
选项:
java -cp . HelloWorld
而且,正如Andreas所写,Java不需要JAVA_HOME
,仅适用于某些第三方工具,例如ant(但应该指向正确的位置)。
你要么添加“。” 到您的CLASSPATH指定当前目录,或者在运行时以unbeli建议的方式手动添加它。
放。 在begin..it中的classpath值将开始工作...它发生的原因是它在路径变量中提到的类路径中搜索类文件。
我有同样的问题。 也许,问题在于您已经使用不同的Java版本编译和执行了该类。
确保编译器的版本与命令“java”相同 :
javac -version
java -version
在Linux中,使用
sudo update-alternatives --config java
更改Java的版本。
我也面临同样的问题....
实际上,由于您的程序.class
文件未保存在该目录中,因此引发了此问题。 从环境变量中删除CLASSPATH(您不需要为简单Java程序设置类路径)并重新打开cmd提示符,然后编译并执行。
如果仔细观察,您的.class
文件将保存在同一位置。 (我不是专家,如果我的句子有任何错误,我也是基础程序员请忽略它:-))
如果从命令行启动java和javac,则不需要JAVA_HOME
。 但是JAVA_HOME
应该指向真正的jdk目录,在你的情况下是C:\\Program Files\\Java\\jdk1.7.0
。
我永远不会在构建脚本之外使用CLASSPATH
环境变量,尤其不是全局定义的。 -cp
标志更好。 但在您的情况下,因为您不需要额外的库( rt.jar
不计算),您将不需要类路径声明。 缺少-cp
等同于-cp .
这就是你需要的)
HelloWorld
类需要声明为
public
。
这实际上可能是您的问题的原因。
(我很确定,源文件需要一个公共类......或者它最多只是一个公共类?)
看起来您已经正确完成了所有设置,但可能存在一个可能导致问题的区域
检查“CLASSPATH”变量的值,确保最后保留;
注意: ; 用于末端分隔符。 是为了包括最后的现有路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.