我正在使用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
我在这里缺少什么?
答案 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
它应该是有效的!