java无法找到或加载主类

时间:2013-07-05 06:43:38

标签: java runtime-error fedora

我正在使用fedora 19。 HelloWorld.java的内容:

    class HelloWorld {
        public static void main( String args[] ) {
            System.out.println( "Hello World!!" );
        }
    }

我可以使用

成功编译它
  

javac HelloWorld.java

但我无法使用

运行它
  

java HelloWorld

它出现以下错误

  

错误:无法找到或加载主类HelloWorld

但我可以使用

运行它
  

sudo java HelloWorld

我在这里缺少什么?

6 个答案:

答案 0 :(得分:9)

您没有设置包含已编译类的类路径!如果您没有告诉它在哪里看,java找不到任何课程。

尝试java -cp . HelloWorld

来源here

不知道为什么它适用于sudo。我的*猜测是,CLASSPATH是为root用户设置的,而不是为当前用户设置的。

答案 1 :(得分:4)

亲爱的Pranav Chugh,

1- cmd - go the directory of located java file

在cmd上运行以下内容

2- javac HelloWorld.java 
3- java HelloWorld             ---- not not add .class

这里你会得到结果

答案 2 :(得分:0)

这很奇怪。 似乎就像问题在于,当您以非特权用户身份运行java时,它无法找到或读取“.class”文件。但是当你以“root”身份运行时,你可以。

这表明您以某种方式设法使用错误的所有者和/或错误的权限创建“HelloWorld.class”文件。

运行ls -l HelloWorld.class检查权限。所有者应该是您的用户帐户(而不是“root”),并且您需要该文件的用户读取权限。

以下是其他一些可能的解释:

  • 您运行的java命令可能不是您认为的那样。检查which java在您自己运行时所说的内容。检查它是“真正的”java可执行文件,而不是当前目录中的某些脚本或某些内容,或者不在root / sudo $PATH上的其他目录。

  • 您可能已经设置了CLASSPATH环境变量,使得当前目录(其中“HelloWorld.class”是......我假设)不在类路径中。但是当您sudo java时,java命令正在运行的环境中未设置$CLASSPATH。在这种情况下,如果没有-cp参数,您将获得一个仅由"."组成的默认类路径;即当前目录。


如果问题原来是CLASSPATH环境变量,我建议您取消设置它...并编辑shell的“rc”文件以便在那里取消设置。

相反,在java命令,javac命令等上使用'-cp'命令...并切换到Ant或Maven或IDE以构建和运行代码。 (或者你可以写一些小的包装器脚本作为应用程序启动器。)

不依赖于CLASSPATH环境变量。它可能会给你带来令人讨厌的惊喜,特别是如果你在编码项目之间切换。 (当然不要在你的生产环境中依赖它!)

答案 3 :(得分:0)

我在Mac 10.7.5上尝试运行HelloWorld时遇到了同样的问题。我编译HelloWorld.java文件时没有遇到javac问题。然后我尝试运行“java HelloWorld”并得到同样的错误:“无法找到或加载主类”

只有在我将Mac终端中的目录(cd)更改为包含.class文件的目录后才能运行该程序。

HTH, 史蒂夫

答案 4 :(得分:0)

之前我有同样的问题。也许你犯了同样的错误。 我的错误是使用“cd”进入包目录而不是正上方的目录。 例如,如果上面的目录名为“Hello”,您可以通过输入以下命令来运行它:java Hello / HelloWorld

答案 5 :(得分:0)

您的CLASSPATH设置似乎是错误的。 检查你的CLASSPATH并确保它是:

CLASSPATH="YourJavaHome/lib:."
注意有一个':。'在句末! 在那之后

source /etc/environment

它应该是有效的!