javac错误:仅在显式请求注释处理时才接受类名

use*_*164 100 java javac

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

error: Class names, 'EnumDevices', are only accepted if annotation 
processing is explicitly requested
1 error
Run Code Online (Sandbox Code Playgroud)

这是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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是javac命令:

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices
Run Code Online (Sandbox Code Playgroud)

我该如何编译这个程序?

aio*_*obe 109

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

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices
Run Code Online (Sandbox Code Playgroud)

来自官方常见问题:

只有在明确请求注释处理时,才接受类名"HelloWorldApp"

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

此外,在您的第二个javac示例中(您实际包含的内容.java),您需要包含编译所需的所有必需的.jar文件.

  • 那也是,但我认为仍然不会产生那个特定的错误。应该产生一个“找不到文件”或类似的东西。 (2认同)
  • 启用注释处理后,您可以在编译期间以编程方式生成类。因此,通过注释处理,即使文件不存在(即,您即时创建丢失的部分),您实际上也可以* 编译某些内容。当然,错误消息具有误导性。如果我进一步调查,我会回复你的。 (2认同)

Tom*_*eld 15

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

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

javac myclass.Java 
Run Code Online (Sandbox Code Playgroud)

相反,它应该是:

javac myclass.java 
Run Code Online (Sandbox Code Playgroud)


小智 9

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


jos*_*gle 7

错误“只有在显式请求注释处理时才接受类名称”可能由以下一种或多种原因引起:

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

这可能不是导致此错误的完整原因列表,但这些是我目前所知道的原因。


小智 6

我了解到,您也可以通过将源文件存储在名为 Java 的文件夹中来获得此错误