0

我是java新手..

我有一个示例结构如下:

/folder/foo.java /folder/bar.java /folder/foobar.java

现在我正在尝试运行 foobar.java 但我得到以下异常

Exception in thread "main" java.lang.ClassNotFoundException: /folder/foobar
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

然后我尝试通过这样做来配置它

java -classpath  .  foobar 
Exception in thread "main" java.lang.NoClassDefFoundError: foobar
Caused by: java.lang.ClassNotFoundException: foobar
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

有什么线索吗?谢谢

4

2 回答 2

2

类路径的默认值为 '.' ,即当前目录。类路径环境变量的值会覆盖该值。如果使用 –cp 或 –classpath 选项发出 java 命令,它将覆盖默认的 '.' 和类路径环境变量值。

下面是在类执行期间设置类路径的示例 C:>java -classpath "." com.abc.example.SayHello

与编译需要提供确切路径的位置相反,要运行类文件,我们需要遵循包结构。

这是由于 Classloader 尝试通过组合其包和类名来解析类位置的方式。您必须位于包根位置并发出指定包结构的 java 命令。

C:>java com.abc.example.SayHello

你好!!

于 2012-12-25T02:34:17.123 回答
1

首先,你需要编译java文件:

javac /folder/*.java

然后你可以运行一个带有main()函数的类:

java -cp . folder.foobar
于 2012-12-25T02:29:21.957 回答