Ошибка javac: имена классов принимаются только в том случае, если явно запрашивается обработка аннотации - PullRequest
88 голосов
/ 21 февраля 2011

Я получаю эту ошибку при компиляции своей 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

Как мне скомпилировать эту программу?

Ответы [ 13 ]

0 голосов
/ 30 июля 2017

Если ваш файл сохранен в качестве примера: hello.java и

class Example.Do это в cmd

javac hello.java

java Пример

Это работает.

0 голосов
/ 16 марта 2015

Ошибка «Имена классов принимаются только в том случае, если обработка аннотации явно запрашивается» может быть вызвана одним или несколькими из следующих действий:

  1. Не использовать расширение .java для вашего файла Java при компиляции.
  2. Неправильная капитализация расширения .java (т.е. .Java) при компиляции.
  3. Любая другая опечатка в расширении .java при компиляции.
  4. При компиляции и запуске в одно и то же время, забывая использовать '&&' для объединения двух команд (то есть javac Hangman.java java Hangman). Мне потребовалось около 30 минут, чтобы понять это, что я заметил, запустив компиляцию и запустив программу по отдельности, что, конечно, прекрасно работало.

Возможно, это не полный список причин этой ошибки, но это причины, о которых я знаю до сих пор.

0 голосов
/ 18 сентября 2014

Как вы можете воспроизвести эту загадочную ошибку на терминале 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 $

Теперь хлопните себя по лбу и ворчите, что сообщение об ошибке настолько загадочно.

...