Javac-Fehler: Klassennamen werden nur akzeptiert, wenn die Verarbeitung von Anmerkungen explizit angefordert wird

112

Ich erhalte diese Fehlermeldung, wenn ich mein Java-Programm kompiliere:

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

Hier ist der Java-Code (ich verwende diesen unter 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);
        }
    }
}

Hier ist der Befehl javac:

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

Wie kompiliere ich dieses Programm?

user513164
quelle

Antworten:

131

Sie müssen mindestens die .javaErweiterung zum Dateinamen in dieser Zeile hinzufügen :

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

Aus der offiziellen FAQ :

Die Klassennamen 'HelloWorldApp' werden nur akzeptiert, wenn die Verarbeitung von Anmerkungen ausdrücklich angefordert wird

Wenn Sie diesen Fehler erhalten, haben Sie vergessen, beim Kompilieren des Programms das Suffix .java anzugeben. Denken Sie daran, der Befehl lautet javac HelloWorldApp.java und nicht javac HelloWorldApp.

Außerdem müssen Sie in Ihrem zweiten Javac-Beispiel (in das Sie tatsächlich aufgenommen haben .java) alle für die Kompilierung erforderlichen .jar-Dateien einfügen.

aioobe
quelle
1
das auch, hätte aber immer noch nicht diesen speziellen Fehler ergeben, denke ich. Sollte eine "Datei nicht gefunden" oder etwas in dieser Richtung ergeben haben.
Jwenting
Ich würde zustimmen. Zumal es ein leichter Fehler ist (da der .classbeim Start mit weggelassen werden sollte java).
Aioobe
"Klassennamen 'HelloWorldApp' werden nur akzeptiert, wenn die Verarbeitung von Anmerkungen ausdrücklich angefordert wird." Was für eine dumme Art zu sagen, Datei nicht gefunden. Oder worauf soll sich die Fehlermeldung beziehen? Ich kann dieses Update nur finden, aber nicht, warum die Fehlermeldung so formuliert ist.
Masterxilo
1
Wenn die Annotationsverarbeitung aktiviert ist, können Sie während der Kompilierung programmgesteuert Klassen generieren. So mit Anmerkung Verarbeitung Sie könnte in der Tat der Kompilierung etwas , obwohl die Datei nicht existiert (dh Sie die fehlenden Teile on the fly zu erstellen). Zugegeben, die Fehlermeldung ist irreführend. Ich melde mich bei Ihnen, wenn ich mich näher damit befasse.
Aioobe
19

Das hat mich auch verblüfft, weil ich die .Java-Erweiterung aufgenommen habe ... dann habe ich die Hauptstadt J bemerkt.

Dies führt auch zu dem Fehler "Anmerkungsverarbeitung":

javac myclass.Java 

Stattdessen sollte es sein:

javac myclass.java 
Tom Warfield
quelle
6

Verwenden Sie javac ClassName.java , um das Programm zu kompilieren, und verwenden Sie dann java ClassName , um den kompilierten Code auszuführen. Sie können Javac nicht nur mit dem Klassennamen mischen (ohne die Java-Erweiterung).

Yong Yuan
quelle
4

Der Fehler "Klassennamen werden nur akzeptiert, wenn die Annotationsverarbeitung explizit angefordert wird" kann durch eine oder mehrere der folgenden Ursachen verursacht werden:

  1. Verwenden Sie beim Kompilieren nicht die Erweiterung .java für Ihre Java-Datei.
  2. Unsachgemäße Großschreibung der .java-Erweiterung (dh .Java) beim Kompilieren.
  3. Alle anderen Tippfehler in der Erweiterung .java beim Kompilieren.
  4. Vergessen Sie beim gleichzeitigen Kompilieren und Ausführen, die beiden Befehle mit '&&' zu verketten (z. B. javac Hangman.java java Hangman). Ich brauchte ungefähr 30 Minuten, um das herauszufinden, was ich bemerkte, als ich die Kompilierung und das Programm separat ausführte, was natürlich einwandfrei funktionierte.

Dies ist möglicherweise nicht die vollständige Liste der Ursachen für diesen Fehler, aber dies sind die Ursachen, die mir bisher bekannt sind.

Joshgoldeneagle
quelle
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

Wenn Sie also nach dem erneuten Kompilieren versehentlich javaczum Ausführen eines Programms verwenden.

Chandan
quelle
3

Ich habe erfahren, dass Sie diesen Fehler auch erhalten können, indem Sie die Quelldatei in einem Ordner namens Java speichern

David Miller
quelle
2

Ich denke, das liegt auch an der falschen Kompilierung.

also für linux (ubuntu) .....

javac file.java

Java-Datei

Amol Jagdale
quelle
3
Die Antworten sollten versuchen, herauszufinden, warum das Problem überhaupt verursacht wird, und dann auf die Lösung hinweisen (falls eine verfügbar ist)
Coder
0

So können Sie diesen kryptischen Fehler auf dem Ubuntu-Terminal reproduzieren:

Fügen Sie dies in eine Datei namens Main.java ein:

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

Dann kompiliere es so:

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

Es ist, weil Sie .javaam Ende nicht angegeben haben Main.

Mach es so und es funktioniert:

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

Schlagen Sie jetzt auf die Stirn und meckern Sie, dass die Fehlermeldung so kryptisch ist.

Eric Leschinski
quelle
2
du hast es auch nicht getan: D! Sie haben in beiden Beispielen Main ohne .java geschrieben!
Freerunner
0

Vielleicht kompilieren Sie mit dem Dateinamen anstelle des Methodennamens .... Überprüfen Sie, ob auch ich den gleichen Fehler gemacht habe, ihn aber schnell korrigiert habe ..... # happy Coding

Sai Saran
quelle
0

Laden Sie zuerst jdk von https://www.oracle.com/technetwork/java/javase/downloads/index.html herunter . Dann in der Suche schreiben Bearbeiten Sie die Systemumgebungsvariablen In geöffnetem Fenster drücke ich unten genannt Umgebungsvariablen Dann geben Sie in Systemvariablen hier Bildbeschreibung ein Push unten neu In Feld neue Variablen schreiben "Pfad" In Feld neuer Wert Schreiben Sie Verzeichnis in Ordner bin in jdk like " C: \ Programme \ Java \ jdk1.8.0_191 \ bin ", aber in meinem Betriebssystem funktioniert nur dieses" C: \ Programme \ Java \ jdk1.8.0_191 \ bin \ javac.exe ". Geben Sie hier die Bildbeschreibung ein und drücken Sie dreimal OK

Starten Sie Cmd. Ich drücke die unteren Fenster + R. Dann schreibe ich cmd. In cmd schreibt "cd (Ihr Verzeichnis mit Code)" wie C: \ Users \ user \ IdeaProjects \ app \ src. Dann schreiben Sie "javac (Name Ihrer Hauptklasse für Ihr Programm) .java" sieht aus wie blabla.java und javac erstellen Bytecode wie (Name Ihrer Hauptklasse) .class in Ihrem Verzeichnis. Schreibe zuletzt in cmd "java (Name deiner Hauptklasse)" und mein Programm startet die Arbeit

Herr Tim und Struppi
quelle
0

Fehler: Klassenname wird nur akzeptiert, wenn die Annotationsverarbeitung explizit angefordert wird

Um diesen Fehler zu vermeiden, sollten Sie den Befehl javac mit der Erweiterung .java verwenden.

Javac DescendingOrder.java <- das funktioniert perfekt.

Avnish
quelle
0

Wenn Sie mehrere Dateien in derselben Zeile kompilieren, stellen Sie sicher, dass Sie javac nur einmal und nicht für jede Klassendatei verwenden.

Falsch: Geben Sie hier die Bildbeschreibung ein

Richtig: Geben Sie hier die Bildbeschreibung ein

kiran
quelle