140 votes

erreur javac : Les noms de classe ne sont acceptés que si le traitement des annotations est explicitement demandé

J'obtiens cette erreur lorsque je compile mon programme java :

error: Class names, 'EnumDevices', are only accepted if annotation 
processing is explicitly requested
1 error

Voici le code java (je l'exécute sur 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);
        }
    }
}

Voici la commande javac :

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

Comment compiler ce programme ?

169voto

aioobe Points 158466

Vous devez au moins ajouter le .java au nom du fichier dans cette ligne :

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

De la FAQ officielle :

Les noms de classe, 'HelloWorldApp', ne sont acceptés que si le traitement des annotations est explicitement demandé.

Si vous recevez cette erreur, vous avez oublié d'inclure le suffixe .java lors de la compilation du programme. Rappelez-vous que la commande est javac HelloWorldApp.java et non javac HelloWorldApp.

De plus, dans votre deuxième exemple de javac, (dans lequel vous avez effectivement inclus .java ), vous devez inclure le tous les fichiers .jar nécessaires à la compilation.

30voto

Tom Warfield Points 29

J'étais également perplexe car j'incluais l'extension .Java... puis j'ai remarqué le J majuscule.

Cela provoquera également l'erreur "traitement des annotations" :

javac myclass.Java 

Au lieu de cela, il devrait être :

javac myclass.java

11voto

Yong Yuan Points 91

Utilisation de javac NomDeClasse.java pour compiler le programme, puis utiliser java Nom de la classe pour exécuter le code compilé. Vous ne pouvez pas mélanger javac avec le ClassName seulement (sans l'extension java).

8voto

joshgoldeneagle Points 2272

L'erreur "Les noms de classe ne sont acceptés que si le traitement des annotations est explicitement demandé" peut être causée par une ou plusieurs des causes suivantes :

  1. Ne pas utiliser l'extension .java pour votre fichier java lors de la compilation.
  2. La capitalisation incorrecte de l'extension .java (c'est-à-dire .Java) lors de la compilation.
  3. Toute autre erreur de frappe dans l'extension .java lors de la compilation.
  4. Lors de la compilation et de l'exécution en même temps, oubli d'utiliser '&&' pour concaténer les deux commandes (par exemple : javac Hangman.java java Hangman). Il m'a fallu environ 30 minutes pour comprendre ce problème, que j'ai remarqué en exécutant la compilation et le programme séparément, ce qui, bien sûr, a parfaitement fonctionné.

La liste des causes de cette erreur n'est peut-être pas exhaustive, mais ce sont celles dont j'ai connaissance à ce jour.

6voto

David Miller Points 49

J'ai appris que vous pouvez également obtenir cette erreur en stockant le fichier source dans un dossier nommé Java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X