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

113

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?

user513164
la source

Réponses:

132

Vous devez au moins ajouter l' .javaextension 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. N'oubliez pas que la commande est javac HelloWorldApp.java et non javac HelloWorldApp.

De plus, dans votre deuxième exemple javac, (dans lequel vous avez réellement inclus .java), vous devez inclure tous les fichiers .jar requis pour la compilation.

aioobe
la source
1
cela aussi, mais n'aurait toujours pas produit cette erreur particulière, je pense. Doit avoir produit un "fichier non trouvé" ou quelque chose du genre.
jwenting le
Je serais d'accord. D'autant que c'est une erreur facile à faire (puisque le .classdoit être omis lors du lancement avec java).
aioobe
"Les noms de classe, 'HelloWorldApp', ne sont acceptés que si le traitement des annotations est explicitement demandé". Quelle stupide façon de dire fichier introuvable. Ou à quoi le message d'erreur est-il censé faire référence? Je ne peux trouver que ce correctif, mais pas pourquoi le message d'erreur est formulé comme ça.
masterxilo
1
Avec le traitement des annotations activé, vous pouvez générer des classes par programme pendant la compilation. Ainsi, avec le traitement des annotations, vous pouvez en fait compiler quelque chose même si le fichier n'existe pas (c'est-à-dire que vous créez les pièces manquantes à la volée). Certes, le message d'erreur est trompeur. Je vous reviendrai si j'examine plus en détail.
aioobe
19

J'étais aussi perplexe parce que j'incluais l'extension .Java ... puis j'ai remarqué la majuscule J.

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

javac myclass.Java 

Au lieu de cela, il devrait être:

javac myclass.java 
Tom Warfield
la source
6

Utilisez javac ClassName.java pour compiler le programme, puis utilisez java ClassName pour exécuter le code compilé. Vous ne pouvez pas mélanger javac avec le ClassName uniquement (sans l'extension java).

Yong Yuan
la source
5

L'erreur "Les noms de classe ne sont acceptés que si le traitement des annotations est explicitement demandé" peut être provoquée par un ou plusieurs des éléments suivants:

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

Ce n'est peut-être pas la liste complète des causes de cette erreur, mais ce sont les causes dont je suis conscient jusqu'à présent.

joshgoldeneagle
la source
3
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

Donc, si vous par erreur après la compilation, utilisez à nouveau javacpour exécuter un programme.

Chandan
la source
3

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

David Miller
la source
2

je pense que c'est aussi à cause d'une compilation incorrecte.

donc pour linux (ubuntu) .....

javac fichier.java

fichier java

Amol Jagdale
la source
3
Les réponses devraient essayer de préciser pourquoi le problème est causé en premier lieu, puis indiquer la solution (si elle est disponible)
Coder
1

Comment vous pouvez reproduire cette erreur cryptique sur le terminal Ubuntu:

Mettez ceci dans un fichier appelé Main.java:

public Main{
    public static void main(String[] args){
        System.out.println("ok");
    }
}

Puis compilez-le comme ceci:

user@defiant /home/user $ javac Main
error: Class names, 'Main', are only accepted if 
annotation processing is explicitly requested
1 error

C'est parce que vous n'avez pas spécifié .javaà la fin deMain .

Faites-le comme ça, et ça marche:

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

Frappez votre front maintenant et grommelez-vous que le message d'erreur est si cryptique.

Eric Leschinski
la source
2
vous non plus: D! vous avez écrit Main sans .java dans les deux exemples!
freerunner
1

Peut-être que vous compilez avec le nom du fichier au lieu du nom de la méthode .... Vérifiez une fois que j'ai aussi fait la même erreur mais je l'ai corrigée rapidement ..... # happy Coding

Sai Saran
la source
0

télécharger d'abord jdk depuis https://www.oracle.com/technetwork/java/javase/downloads/index.html . Ensuite , à la recherche d' écriture Modifier les variables d'environnement système dans la fenêtre ouverte i pousser des variables appelées environnement bas , puis dans les variables système entrez la description d'image ici Poussez bas nouveau Dans le champ de nouvelles variables écrire « Path » Dans le champ nouveau répertoire Valeur Write dans le bac de dossier dans jdk comme " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "mais dans mon système d'exploitation ne fonctionne que" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe " entrez la description de l'image ici appuyez sur ok 3 fois

Démarrez Cmd. Je pousse les fenêtres du bas + R. Ensuite, écris cmd. Dans cmd, écrivez "cd (votre répertoire avec code)" ressemble à C: \ Users \ user \ IdeaProjects \ app \ src. Ensuite, écrivez "javac (nom de votre classe principale pour votre programme) .java" ressemble à blabla.java et javac crée un code d'octet comme (nom de votre classe principale) .class dans votre répertoire. dernière écriture dans cmd "java (nom de votre classe principale)" et mon programme démarre le travail

Monsieur Tintin
la source
0

Erreur: le nom de classe n'est accepté que si le traitement des annotations est explicitement demandé

Pour éviter cette erreur, vous devez utiliser la commande javac avec l'extension .java.

Javac DescendingOrder.java <- cela fonctionne parfaitement.

Avnish
la source
0

Si vous compilez plusieurs fichiers sur la même ligne, assurez-vous de n'utiliser javac qu'une seule fois et non pour chaque fichier de classe.

Incorrect: entrez la description de l'image ici

Correct: entrez la description de l'image ici

Kiran
la source