无法运行已编译的java类,错误:仅当显式请求注释处理时才接受类名
好的,这似乎是一个典型的错误,因为在中讨论了很多,但是我仍然不知道我的程序出了什么问题。我使用commmand提示符编译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
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
子目录中)…(注意“错误名称”位)如果包是
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
,如果它在packagefoo
中),并且文件必须位于相对于当前工作目录的正确位置(再次假设packagefoo
,类文件必须位于foo
子目录中)…(请注意“错误名称”位)如果包是
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