Errore javac: i nomi delle classi vengono accettati solo se l'elaborazione delle annotazioni è esplicitamente richiesta


113

Ottengo questo errore quando compilo il mio programma java:

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

Ecco il codice java (lo sto eseguendo su 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);
        }
    }
}

Ecco il comando javac:

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

Come compilo questo programma?

Risposte:


132

Devi almeno aggiungere l' .javaestensione al nome del file in questa riga:

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

Dalle faq ufficiali :

I nomi delle classi, "HelloWorldApp", sono accettati solo se l'elaborazione delle annotazioni è esplicitamente richiesta

Se ricevi questo errore, hai dimenticato di includere il suffisso .java durante la compilazione del programma. Ricorda, il comando è javac HelloWorldApp.java non javac HelloWorldApp.

Inoltre, nel tuo secondo esempio di javac (in cui hai effettivamente incluso .java) devi includere tutti i file .jar richiesti per la compilazione.


1
anche quello, ma credo ancora non avrebbe prodotto quel particolare errore. Avrebbe dovuto restituire un "file non trovato" o qualcosa del genere.
jwenting

Sono d'accordo. Soprattutto perché è un errore facile da fare (dal momento che .classdovrebbe essere omesso all'avvio con java).
aioobe

"I nomi delle classi, 'HelloWorldApp', sono accettati solo se l'elaborazione delle annotazioni è esplicitamente richiesta". Che modo stupido per dire che il file non è stato trovato. O a cosa dovrebbe riferirsi il messaggio di errore? Posso solo trovare questa correzione, ma non perché il messaggio di errore sia scritto in questo modo.
masterxilo

1
Con l'elaborazione delle annotazioni abilitata è possibile generare classi in modo programmatico durante la compilazione. Quindi, con l'annotazione elaborazione voi potrebbe in realtà compilazione qualcosa anche se il file non esiste (cioè creare le parti mancanti al volo). Certo, il messaggio di errore è fuorviante. Ti ricontatterò se approfondirò la questione.
aioobe

19

Anche questo mi ha sconcertato perché includevo l'estensione .Java ... poi ho notato la J.

Ciò causerà anche l'errore "elaborazione annotazioni":

javac myclass.Java 

Invece, dovrebbe essere:

javac myclass.java 

6

Utilizzando javac ClassName.java per compilare il programma, quindi utilizzare java ClassName per eseguire il codice compilato. Non puoi combinare javac solo con ClassName (senza l'estensione java).


5

L'errore "I nomi delle classi sono accettati solo se l'elaborazione delle annotazioni è esplicitamente richiesta" può essere causato da uno o più dei seguenti:

  1. Non si utilizza l'estensione .java per il file java durante la compilazione.
  2. Uso improprio delle maiuscole dell'estensione .java (cioè .Java) durante la compilazione.
  3. Qualsiasi altro errore di battitura nell'estensione .java durante la compilazione.
  4. Durante la compilazione e l'esecuzione allo stesso tempo, dimenticando di usare '&&' per concatenare i due comandi (es. Javac Hangman.java java Hangman). Mi ci sono voluti circa 30 minuti per capirlo, cosa che ho notato eseguendo la compilation e il programma separatamente, che ovviamente ha funzionato perfettamente.

Questo potrebbe non essere l'elenco completo delle cause di questo errore, ma queste sono le cause di cui sono a conoscenza finora.


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

Quindi, se per errore dopo aver compilato di nuovo, usa javacper eseguire un programma.


3

Ho imparato che puoi anche ottenere questo errore archiviando il file di origine in una cartella denominata Java


2

Penso che ciò sia dovuto anche a una compilazione errata ..

quindi per linux (ubuntu) .....

javac file.java

java file


3
Le risposte dovrebbero cercare di approfondire sottolineando perché il problema è stato causato in primo luogo e quindi indicare la soluzione (se disponibile)
Coder

1

Come puoi riprodurre questo errore criptico sul terminale Ubuntu:

Mettilo in un file chiamato Main.java:

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

Quindi compilarlo in questo modo:

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

È perché non hai specificato .javaalla fine di Main.

Fallo in questo modo e funziona:

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

Ora schiaffeggia la fronte e borbotta che il messaggio di errore è così criptico.


2
neanche tu: D! hai scritto Main senza .java in entrambi gli esempi!
freerunner

1

Forse stai compilando con il nome del file invece del nome del metodo .... Controlla una volta anche io ho fatto lo stesso errore ma l'ho corretto velocemente ..... # felice Coding


0

prima scarica jdk da https://www.oracle.com/technetwork/java/javase/downloads/index.html . Quindi nella ricerca scrivi Modifica le variabili d'ambiente di sistema Nella finestra aperta spingo in basso chiamato Variabili d'ambiente Quindi in Variabili di sistema inserisci qui la descrizione dell'immagine Premi in basso nuovo Nel campo nuove variabili scrivi "Percorso" Nel campo nuovo valore Scrivi directory nella cartella bin in jdk come " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "ma nel mio sistema operativo funziona solo questo" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe " inserisci la descrizione dell'immagine qui premi ok 3 volte

Avvia Cmd. Spingo Windows in basso + R. Quindi scrivo cmd. In cmd scrivi "cd (la tua directory con il codice)" assomiglia a C: \ Users \ user \ IdeaProjects \ app \ src. Quindi scrivi "javac (nome della tua classe principale per il tuo programma) .java" sembra blabla.java e javac crea un byte code come (nome della tua classe principale) .class nella tua directory. l'ultima scrittura in cmd "java (nome della classe principale)" e il mio programma inizia a funzionare


0

Errore: nome classe accettato solo se l'elaborazione dell'annotazione è richiesta esplicitamente

Per evitare questo errore, dovresti usare il comando javac con estensione .java.

Javac DescendingOrder.java <- funziona perfettamente.


0

Se compili più file nella stessa riga, assicurati di utilizzare javac solo una volta e non per ogni file di classe.

non corretto: inserisci qui la descrizione dell'immagine

Corretta: inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.