javac错误:只有在明确请求注解处理的情况下,类名才被接受

编译我的java程序时出现这个错误:

error: Class names, 'EnumDevices', are only accepted if annotation processing is explicitly requested 1 error 

这里是java代码(我在Ubuntu上运行这个)。

 import jcuda.CUDA; import jcuda.driver.CUdevprop; import jcuda.driver.types.CUdevice; public class EnumDevices { public static void main(String args[]) { CUDA cuda = new CUDA(true); int count = cuda.getDeviceCount(); System.out.println("Total number of devices: " + count); for (int i = 0; i < count; i++) { CUdevice dev = cuda.getDevice(i); String name = cuda.getDeviceName(dev); System.out.println("Name: " + name); int version[] = cuda.getDeviceComputeCapability(dev); System.out.println("Version: " + String.format("%d.%d", version[0], version[1])); CUdevprop prop = cuda.getDeviceProperties(dev); System.out.println("Clock rate: " + prop.clockRate + " MHz"); System.out.println("Threads per block: " + prop.maxThreadsPerBlock); } } } 

这里是javac命令:

 javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices 

我如何编译这个程序?

您至less需要将.java扩展名添加到此行的文件名中:

 javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices 

从官方faq :

类名“HelloWorldApp”仅在明确请求注解处理时才被接受

如果收到此错误,则在编译程序时忘记了包含.java后缀。 请记住,该命令是javac HelloWorldApp.java而不是javac HelloWorldApp。

另外,在你的第二个javac例子中(你实际上包含了.java ),你需要包含编译所需的全部必需的.jar文件。

我也被这个难住,因为我包括了.Java的扩展…然后我注意到首都J.

这也会导致“注释处理”错误:

 javac myclass.Java 

相反,它应该是:

 javac myclass.java 

使用javac ClassName.java编译程序,然后使用java ClassName执行编译代码。 您不能将javac与ClassName混合(不带java扩展名)。

我知道你也可以通过将源文件存储在一个名为Java的文件夹中来得到这个错误

如何在Ubuntuterminal上重现这个神秘的错误:

把它放在一个名为Main.java的文件中:

 public Main{ public static void main(String[] args){ System.out.println("ok"); } } 

然后像这样编译它:

 user@defiant /home/user $ javac Main error: Class names, 'Main', are only accepted if annotation processing is explicitly requested 1 error 

这是因为你没有在Main的末尾指定.java

这样做,它的工作原理:

 user@defiant /home/user $ javac Main.java user@defiant /home/user $ 

现在打你的额头,抱怨错误信息是如此神秘。

 chandan@cmaster:~/More$ javac New.java chandan@cmaster:~/More$ javac New error: Class names, 'New', are only accepted if annotation processing is explicitly requested 1 error 

所以如果你在编译之后再犯错用javac来运行一个程序。

是的,你必须指定.java扩展名

我已经做了一个脚本(一个bash别名)以最基本的方式执行编译器。 我使用它在原型devise项目结构时,在Linux(Debian 9)的terminal上使用vim查看模式和简单的东西。 老实说有些时候我觉得比使用低内存的电脑更适合使用ide,而我只需要一个文本编辑器。

https://github.com/Karmavil/bash_aliases

随意贡献改进或与其他平台的新分支…这只是一个基本的脚本

如果错误“只有明确请求注解处理才接受类名称”,则可能由以下一个或多个因素引起:

  1. 在编译时不要使用.java扩展名。
  2. .java扩展(即.Java)在编译时大小写不正确。
  3. 编译时.java扩展名中的任何其他拼写错误。
  4. 在编译和运行的同时,忘记使用'&&'连接两个命令(即javac hangman.java java hangman)。 我花了30分钟才弄明白了这一点,通过运行编译程序和单独运行程序,我注意到了这一点,这当然工作得很好。

这可能不是这个错误的原因的完整列表,但是这些是我迄今为止知道的原因。

如果你的ur文件被保存为例:hello.java和

class Example.Do this in cmd

javac hello.java

java示例

这样可行。