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

问题描述 投票:87回答:12

编译我的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
12个回答
97
投票

您至少需要在此行中将.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文件。


0
投票

Error : class name only accepted if annotation processing is explicitly request

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

Javac DescendingOrder.java < - 这完美无缺。


0
投票

我认为这也是因为编译错误..

所以对于linux(ubuntu).....

javac file.java

java文件


-2
投票

如果将ur文件保存为示例:hello.java和

class Example.在cmd中执行此操作

javac hello.java

java示例

这样可行。


-2
投票

您查看路径javac.exe和java.exe

D:\ Test>“C:\ jdk1.7.0_80 \ bin \ javac.exe”TestMain.java D:\ Test>“C:\ jdk1.7.0_80 \ bin \ java.exe”TestMain.java


13
投票

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

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

javac myclass.Java 

相反,它应该是:

javac myclass.java 

4
投票

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


3
投票

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


1
投票
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来运行程序。


0
投票

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

  1. 编译时不使用.java扩展名作为java文件。
  2. 编译时.java扩展名(即.Java)的大写不正确。
  3. 编译时.java扩展名中的任何其他拼写错误。
  4. 在同时编译和运行时,忘记使用'&&'连接两个命令(即javac Hangman.java java Hangman)。我花了30分钟来解决这个问题,我通过运行编译和单独运行程序注意到这一点,当然这完全没问题。

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


0
投票

如何在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

这是因为你没有在.java结束时指定Main

这样做,它的工作原理:

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

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


0
投票

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


0
投票

首先从https://www.oracle.com/technetwork/java/javase/downloads/index.html下载jdk。然后在搜索中编辑系统环境变量在打开的窗口中我推底部称为环境变量然后在系统变量中enter image description here推送底部新的在字段中新变量写入“路径”在字段中新值写入目录在文件夹bin中的jdk如“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次

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

© www.soinside.com 2019 - 2024. All rights reserved.