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

如何编译这个程序?

469999 次浏览

您至少需要将 .java扩展名添加到这一行中的文件名中:

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

来自 官方常见问题:

只有在显式请求注释处理时,才接受类名‘ HelloWorldApp’

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

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

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

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

javac myclass.Java

相反,它应该是:

javac myclass.java

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

现在拍拍你的前额,抱怨错误消息太神秘了。

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

  1. 在编译 Java 文件时没有使用.java 扩展名。
  2. 编译时.Java 扩展名(例如.Java)的大写不正确。
  3. 编译时.java 扩展名中的任何其他输入错误。
  4. 在同时编译和运行时,忘记使用’& &’来连接两个命令(即 javac Hangman.java Hangman)。我花了差不多30分钟才弄明白这个问题,通过分别运行编译和运行程序我注意到了这一点,当然这两个过程运行得非常好。

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

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 ClassName.java编译程序, 然后使用 Java 课程名称来执行编译后的代码。你不能只把 javac 和 ClassName 混在一起(没有 java 扩展名)。

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

也许你可以用文件名而不是方法名来编译... ... 检查一下我是否也犯了同样的错误,但我很快纠正了它... ... # Happy Coding

首先从 https://www.oracle.com/technetwork/java/javase/downloads/index.html下载 jdk。 然后在搜索中编写系统环境变量 在打开的窗口中,我按下称为环境变量的底部 然后在系统变量 在此输入图像描述 按下新的 在字段中新的变量写“路径” 在字段中,将目录写入 jdk 中的文件夹 bin,如下所示 “ C: Program Files Java jdk1.8.0 _ 191 bin” 但是在我的操作系统中只有这个“ C: Program Files Java jdk1.8.0 _ 191 bin javac.exe” 在此输入图像描述 按 OK 三次

启动控制中心。 我按下面的窗口 + R。 那就写 cmd。 在 cmd 中写“ cd (你的目录和代码)”看起来像 C: Users user IdeProjects app src。 然后写“ javac (程序的主类的名称) . java”看起来像 blabla.java 和 javac 在目录中创建字节代码,如(主类的名称) . class。 最后写在 cmd“ java (你的主类的名称)”和我的程序开始工作

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

为了避免这个错误,您应该使用扩展名为.java 的 javac 命令。

Java <-这个工作非常完美。

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

错误: enter image description here

正确:enter image description here

我从 Maven 项目中创建了一个 jar 文件 (写 包裹Mvn 安装)

之后,我打开 cmd,移动到罐子的方向,然后

将此代码运行到

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

编辑: 输入 Pom 文件后声明主运行代码:

java -jar FILENAME.JAR