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

无法运行已编译的java类,错误:仅当显式请求注释处理时才接受类名,java,Java,好的,这似乎是一个典型的错误,因为在中讨论了很多,但是我仍然不知道我的程序出了什么问题。我使用commmand提示符编译java类 TestQueueString.java是我创建的一个简单类,用于测试我的实现 在QueueStringBlock.java中,队列的块表示形式。我就是这样编译的 C:\Users\ME\Desktop\Lab>javac -cp DAT.jar;Exceptions.jar QueueStringBlock.java TestQueueString.java

好的,这似乎是一个典型的错误,因为在中讨论了很多,但是我仍然不知道我的程序出了什么问题。我使用commmand提示符编译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文件:)

您正在调用编译器
javac
,以运行程序。您可以通过
java
运行程序,而不是
javac
。您的第二个命令应该是:

java -cp DAT.jar;Exceptions.jar TestQueueString
注意“java”上没有“c”,自从您在编译时添加类路径以来,我已经添加了类路径


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

  • 当前目录不在类路径中;尝试:

    java -cp DAT.jar;Exceptions.jar;. TestQueueString
    
    (注意类路径末尾的
    ;.

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

  • 考虑到您引用的错误消息,并假设您使用的是最新版本的Java,我猜#1,因为#2会说

    Exception in thread "main" java.lang.NoClassDefFoundError: TestQueueString (wrong name: foo/TestQueueString) 线程“main”java.lang.NoClassDefFoundError中出现异常:TestQueueString(错误名称:foo/TestQueueString)
    …(注意“错误名称”位)如果包是
    foo

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

    java -cp DAT.jar;Exceptions.jar TestQueueString
    
    注意“java”上没有“c”,自从您在编译时添加类路径以来,我已经添加了类路径


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

  • 当前目录不在类路径中;请尝试:

    java -cp DAT.jar;Exceptions.jar;. TestQueueString
    
    (注意类路径末尾的
    ;.

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

  • 考虑到您引用的错误消息,并假设您使用的是最新版本的Java,我猜#1,因为#2会说

    Exception in thread "main" java.lang.NoClassDefFoundError: TestQueueString (wrong name: foo/TestQueueString) 线程“main”java.lang.NoClassDefFoundError中出现异常:TestQueueString(错误名称:foo/TestQueueString)
    …(请注意“错误名称”位)如果包是
    foo

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

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

    您正在将类路径设置为Dat.jar和Exception.jar,本质上告诉JVM在这些位置查找.class文件。但是,TestQueueString不在这两个.jar文件中。它在当前目录中。因为您告诉JV要在.jars中查找.class文件,它不会检查当前目录。 一步一步地分解,这行:

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

    这仍然没有帮助。请参阅上面的“我的编辑:”)谢谢您的回答。@Trissim:编辑更改了问题。我编辑了答案以反映新的问题。T.J.Crowder:“java-cp DAT.jar;Exceptions.jar TestQueueString”会导致相同的错误…:TestQueueString.java只有几行,只是一个调用QueueStringBlock实现的构造函数,即q.enqueue()、q.dequeue()等。它根本没有包声明。@Trissim:对不起,我在编辑的#1中出错了,我有点忘了将
    添加到类路径中(这是#1的全部要点)。如果不是这样,很明显,您需要在问题中发布
    TestQueueString.java
    的完整内容。这仍然没有帮助。请参阅上面的编辑:)谢谢您的回答。@Trissim:编辑更改了问题。我编辑了答案以反映新的问题。T.J.Crowder:“java-cp DAT.jar;Exceptions.jar TestQueueString”会导致相同的错误…:而TestQueueString.java只有几行,只有一个调用QueueStringBlock实现的构造函数,即q.enqueue()、q.dequeue()等。它没有包declar