好吧,这似乎是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文件:)
答案 0 :(得分:5)
您正在调用编译器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
,请注意“错误名称”位。
答案 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也在当前目录中搜索。