【问题标题】:javac error: Class names are only accepted if annotation processing is explicitly requestedjavac 错误:仅当显式请求注释处理时才接受类名
【发布时间】:2011-07-01 02:24:24
【问题描述】:

我在编译我的 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

如何编译这个程序?

【问题讨论】:

    标签: java javac


    【解决方案1】:

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

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

    来自official faq

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

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

    另外,在您的第二个 javac 示例中(实际上您在其中包含了.java),您需要包含编译所需的所有 .jar 文件。

    【讨论】:

    • 也是如此,但我认为仍然不会产生那个特定的错误。应该产生“找不到文件”或类似的东西。
    • 我同意。尤其是因为这是一个容易犯的错误(因为使用java 启动时应该省略.class)。
    • "类名,'HelloWorldApp',仅在明确请求注释处理时才被接受"。说找不到文件是多么愚蠢的方式。或者错误消息应该指的是什么?我只能找到此修复程序,但找不到错误消息为何如此措辞。
    • 启用注释处理后,您可以在编译期间以编程方式生成类。因此,通过注释处理,您实际上可以编译某些文件,即使该文件不存在(即您即时创建缺少的部分)。当然,错误消息具有误导性。如果我进一步调查,我会回复你。
    【解决方案2】:

    我也被这件事难住了,因为我包含了 .Java 扩展名……然后我注意到了大写的 J。

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

    javac myclass.Java 
    

    相反,它应该是:

    javac myclass.java 
    

    【讨论】:

      【解决方案3】:

      如何在 Ubuntu 终端上重现这个神秘错误:

      把它放在一个名为 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 $
      

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

      【讨论】:

      • 你也没有:D!您在两个示例中都编写了没有 .java 的 Main!
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:
        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来运行程序。

        【讨论】:

        • 那么我们应该用什么来运行程序而不是javac
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            也许您可能使用文件名而不是方法名进行编译....检查一次我也犯了同样的错误,但我很快纠正了它.....#happy Coding

            【讨论】:

              【解决方案9】:

              首先从https://www.oracle.com/technetwork/java/javase/downloads/index.html下载jdk。 然后在搜索中写入编辑系统环境变量 在打开的窗口中,我推底部称为环境变量 然后在系统变量enter image description here 推底新 在字段中新变量写“路径” 在 jdk 文件夹 bin 中的字段新值中写入目录,如 "C:\Program Files\Java\jdk1.8.0_191\bin" 但在我的操作系统中只有这个“C:\Program Files\Java\jdk1.8.0_191\bin\javac.exe” enter image description here 按确定3次

              启动命令。 我按底部窗口+ R。 然后写cmd。 在 cmd 中写入“cd(带有代码的目录)”看起来像 C:\Users\user\IdeaProjects\app\src。 然后写“javac(你的程序的主类的名称).java”看起来像blabla.java 和 javac 在您的目录中创建字节码,例如 (您的主类的名称).class。 最后在 cmd "java (你的主类的名称)" 中写入,我的程序开始工作

              【讨论】:

                【解决方案10】:

                为避免此错误,您应该使用带有 .java 扩展名的 javac 命令。

                Javac DescendingOrder.java

                【讨论】:

                  【解决方案11】:

                  如果您在同一行编译多个文件,请确保您只使用一次 javac,而不是对每个类文件。

                  不正确:

                  正确:

                  【讨论】:

                    【解决方案12】:

                    我从一个 Maven 项目创建了一个 jar 文件 (通过编写 mvn packagemvn install

                    然后我打开cmd,移动到jar方向然后

                    运行这段代码

                    java -cp FILENAME.jar package.Java-Main-File-Name-Class
                    

                    已编辑:放入 Pom 文件后声明 main 运行代码:

                    java -jar FILENAME.JAR
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-07-22
                      • 2018-07-05
                      相关资源
                      最近更新 更多