好吧,这似乎是 here 中讨论的一个典型错误。 ,但是我仍然不知道我的程序出了什么问题。我使用命令提示符来编译我的 java 类。
TestQueueString.java
是我创建的一个简单的类,用于测试我的实现
QueueStringBlock.java 中队列的 block 表示形式。我就是这样编译的。
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
时,它总是要求 main 方法,我猜:
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
文件具有package
声明。如果是这样,您需要告诉java
类的全名(例如,foo.TestQueueString
而不仅仅是TestQueueString
如果它位于包foo
),并且该文件必须位于相对于当前工作目录的正确位置(再次假设包foo
,类文件必须位于foo
子目录)。
鉴于您引用的错误消息,并假设您使用的是最新版本的 Java,我猜测#1,因为#2 会说类似的内容
Exception in thread "main" java.lang.NoClassDefFoundError: TestQueueString (wrong name: foo/TestQueueString)
...(注意“错误名称”位)如果包是 foo
。
关于java - 无法运行已编译的java类,错误: Class names are only accepted if annotation processing is explicitly requested,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901818/