6

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

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

我可以使用成功编译它

javac HelloWorld.java

但我无法使用它运行它

java HelloWorld

它给出了以下错误

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

但我可以使用

须藤 java HelloWorld

我在这里想念什么???

4

6 回答 6

9

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

尝试java -cp . HelloWorld

来源在这里

不知道为什么它可以与 sudo 一起使用。我的*猜测是,CLASSPATH 是为 root 用户设置的,而不是为当前用户设置的。

于 2013-07-05T06:47:09.160 回答
4

亲爱的普拉纳夫丘格,

1- cmd - go the directory of located java file

在 cmd 上运行以下命令

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

在这里你会得到结果

于 2013-11-03T05:01:04.190 回答
0

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

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

HTH,史蒂夫

于 2014-01-20T16:23:36.410 回答
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 环境变量。它可能会给您带来令人讨厌的惊喜,尤其是当您在编码项目之间切换时。(当然不要在你的生产环境中依赖它!)

于 2013-07-05T07:00:45.703 回答
0

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

于 2015-05-17T06:11:06.793 回答
0

看来您的 CLASSPATH 设置是错误的。检查您的 CLASSPATH 并确保它是:

CLASSPATH="YourJavaHome/lib:."

注意有一个':.' 在句末!在那次跑步之后

source /etc/environment

它应该工作!

于 2015-08-28T09:10:06.233 回答