无法运行已编译的java类,错误:只有在显式请求注释处理时才接受类名

时间:2012-03-28 05:50:24

标签: java

好吧,这似乎是here中讨论很多的典型错误,但我仍然不知道我的程序有什么问题。我使用命令提示符来编译我的java类。

TestQueueString.java是我创建的一个简单类,用于测试我的实现 QueueStringBlock.java中队列的块表示。这是我编译的方式。

C:\Users\ME\Desktop\Lab>javac -cp DAT.jar;Exceptions.jar QueueStringBlock.java TestQueueString.java

C:\Users\ME\Desktop\Lab>javac TestQueueString
error: Class names, 'TestQueueString', are only accepted if annotation processing is
explicitly requested 1 error

任何帮助都将不胜感激。

修改

当我使用java代替javac时,它总是要求我猜的主要方法:

C:\Users\TRI\Desktop\Lab>java -cp DAT.jar;Exceptions.jar TestQueueString
Exception in thread "main" java.lang.NoClassDefFoundError: TestQueueString
Caused by: java.lang.ClassNotFoundException: TestQueueString
        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:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: TestQueueString.  Program will exit.

请注意,它在编译后会生成.class文件:)

2 个答案:

答案 0 :(得分:5)

您正在调用编译器javac运行您的程序。您通过java而非javac运行该计划。你的第二个命令应该是:

java -cp DAT.jar;Exceptions.jar TestQueueString

注意“java”上没有“c”,我添加了类路径,因为你在编译时添加了它。


重新编辑:问题正是它所说的:它无法找到类TestQueueString。我可以想到两个可能的原因:

  1. 当前目录不在您的类路径中;尝试:

    java -cp DAT.jar;Exceptions.jar;. TestQueueString
    

    (注意类路径末尾的;.。)

  2. 您的TestQueueString.java文件有package声明。如果是这样,您需要告诉java该类的全名(例如foo.TestQueueString,而不仅仅是TestQueueString,如果它在包foo中),并且该文件必须在相对于当前工作目录的正确位置(再次假设包foo,类文件必须位于foo子目录中。)

  3. 鉴于您引用的错误消息,并假设您使用的是最新版本的Java,我猜是#1,因为#2会说类似

    Exception in thread "main" java.lang.NoClassDefFoundError: TestQueueString (wrong name: foo/TestQueueString)

    ...(如果包是foo,请注意“错误名称”位。

答案 1 :(得分:1)

您正在将Classpath设置为Dat.jar和Exception.jar,实质上是告诉JVM在这些位置查找.class文件。但是,TestQueueString不在.jar文件中。它位于您当前的目录中。由于您告诉JVM在.jars中查找.class文件,因此它不会检查您当前的目录。 一步一步地分解,这一行:

java -cp DAT.jar;Exceptions.jar TestQueueString

说:运行java程序,使用类TestQueueString中的main方法,并在Dat.jar和Exceptions.jar中搜索.class文件。 你可以做的是添加“。;”到Classpath的开头,告诉JVM也在当前目录中搜索。