2011-03-17 93 views
0

我尝试通过执行以下操作从Windows XP CMD行创建并运行Java程序,该程序失败。任何人都可以告诉我什么看起来错了/还有什么要尝试?无法从Windows XP命令行运行Java程序 - ClassNotFoundException

 
C:\> java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode) 

C:\> mkdir c:\j\ 
C:\> cd c:\j\ 
C:\j\> notepad Test.java 

(打开记事本,我插入下面的文本和保存,然后关闭。)

public class Test{ 
    public static void main(String[] args){ 
    System.out.println("hi"); 
    } 
} 

C:\j\> javac Test.java 
C:\j\> java Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test 
Caused by: java.lang.ClassNotFoundException: test 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: test. Program will exit. 

真正的问题是,当我尝试调试用Eclipse项目,我得到一个“无法创建Java虚拟机”的错误,并且我试图在没有IDE的情况下先测试编译&以确保我的JDK安装正常。


更新:你是正确的,CLASSPATH设置我的机器上,但是我仍然会得到一个异常。执行该建议的生产线生产:(。)

C:\j>java -cp . Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Test) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$000(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: test. Program will exit. 

回答

4

它看起来像CLASSPATH环境变量设置你的机器上,并且该值不包括传统的“点”代表当前目录。你可以让Java看起来像这样:

java -cp。测试

(这是java空间破折号cp空间点空间测试)。

+0

感谢您的建议,请参阅原文中的“edit1” – remington123 2011-03-17 02:56:16

0

此命令在屏幕上输出什么?

C:\j> ls 

如果你不能看到的Test.class,编译程序,即再次javac Test.java,然后执行它java Test

的编辑: -

建议您不要用较小的创建类案例。请参阅Java coding convention。尝试手动删除Test.class。重新编译代码并再次运行。

+0

不,这个明确的y不是它 - “错误的名字”消息意味着正在找到类文件。 – 2011-03-17 03:01:40

0

回答问题2,然后:您向我们展示的内容不是实际的剪切和粘贴。您遇到的问题是,用于命名Java源代码中的“Test”类的字母大小写以及您用来在命令行上调用该类的字母大小写不匹配。根据错误信息,我会说源代码中显示“class Test”,但是您在命令行上输入了“java test”。

+0

我一直在包括实际的剪切粘贴文本。该类将“.java”文件定义为Test,并且大写字母“T”。 “.java”文件是大写“T”的“Test.java”。我试过同时运行: “java -cp.test” 和 “java -cp.test” 两者都产生相同的错误信息。 – remington123 2011-03-17 03:15:43

+0

也许当你编译它时,你写了javac test.java,而这个类文件现在叫做test.class? Windows在这方面是PITA。 – 2011-03-17 03:42:56

0

这不是一个真正的答案,因为它不是所需的行为,但是我的类已被定义(并且在命令行命令中用大写字母“T”作为“Test”引用,而且我看到运行时错误,说没有找到带有小写字母“t”的类“test” 经过大量的试验和错误之后,我将“Test.java”重命名为“test.java”并编辑了源文件以定义然后我使用命令行命令“java test”重新编译和运行程序,现在可以运行了。我正在使用的Java安装显然不允许类名字以大写字母开头...?