javac-fout: klassenamen worden alleen geaccepteerd als annotatieverwerking expliciet wordt gevraagd

Ik krijg deze foutmelding wanneer ik mijn Java-programma compileer:

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

Hier is de Java-code (ik gebruik deze op 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 is het javac-commando:

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

Hoe compileer ik dit programma?


Antwoord 1, autoriteit 100%

Je moet op zijn minst de extensie .javatoevoegen aan de bestandsnaam in deze regel:

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

Van de officiële faq:

Klassenamen, ‘HelloWorldApp’, worden alleen geaccepteerd als annotatieverwerking expliciet wordt gevraagd

Als u deze foutmelding krijgt, bent u vergeten het .java-achtervoegsel op te nemen bij het compileren van het programma. Onthoud dat het commando javac HelloWorldApp.java is en niet javac HelloWorldApp.

Ook in je tweede javac-voorbeeld (waarin je feitelijk .javahebt opgenomen) moet je de allevereiste .jar-bestanden opnemen die nodig zijn voor compilatie.


Antwoord 2, autoriteit 14%

Hierdoor was ik ook stomverbaasd omdat ik de .Java-extensie gebruikte … toen zag ik de hoofdletter J.

Dit veroorzaakt ook de fout “annotatieverwerking”:

javac myclass.Java 

In plaats daarvan zou het moeten zijn:

javac myclass.Java 

Antwoord 3, autoriteit 6%

javac ClassName.javagebruiken om het programma te compileren,
gebruik dan java ClassNameom de gecompileerde code uit te voeren. Je kunt Java niet alleen combineren met de ClassName (zonder de Java-extensie).


Antwoord 4, autoriteit 5%

De fout “Klassenamen worden alleen geaccepteerd als annotatieverwerking expliciet wordt aangevraagd” kan worden veroorzaakt door een of meer van de volgende zaken:

  1. De extensie .java voor je java-bestand niet gebruiken bij het compileren.
  2. Onjuist hoofdlettergebruik van de .java-extensie (d.w.z. .Java) tijdens het compileren.
  3. Elke andere typefout in de .java-extensie tijdens het compileren.
  4. Bij gelijktijdig compileren en uitvoeren, vergeten ‘&&’ te gebruiken om de twee commando’s samen te voegen (d.w.z. javac Hangman.java java Hangman). Het kostte me ongeveer 30 minuten om dit uit te zoeken, wat ik merkte door de compilatie en het programma afzonderlijk uit te voeren, wat natuurlijk prima werkte.

Dit is misschien niet de volledige lijst met oorzaken van deze fout, maar dit zijn de oorzaken die ik tot nu toe ken.


Antwoord 5, autoriteit 3%

Ik heb geleerd dat je deze fout ook kunt krijgen door het bronbestand op te slaan in een map met de naam Java


Antwoord 6, autoriteit 2%

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

Dus als je per ongeluk na het opnieuw compileren bent, gebruik dan javacom een programma uit te voeren.


Antwoord 7

Hoe u deze cryptische fout op de Ubuntu-terminal kunt reproduceren:

Zet dit in een bestand met de naam Main.java:

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

Compleet het dan als volgt:

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

Het is omdat je .javaniet hebt opgegeven aan het einde van Main.

Doe het zo, en het werkt:

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

Sla nu op je voorhoofd en mopper dat de foutmelding zo cryptisch is.


Antwoord 8

Misschien ben je aan het compileren met de bestandsnaam in plaats van de methodenaam….Controleer een keer dat ik dezelfde fout heb gemaakt, maar ik heb het snel gecorrigeerd …..#happy Coding


Antwoord 9

download eerst jdk van https://www.oracle.com /technetwork/java/javase/downloads/index.html.
Schrijf vervolgens in zoeken Bewerk de systeemomgevingsvariabelen
In open venster druk ik op de onderkant genaamd Omgevingsvariabelen
Voer vervolgens in Systeemvariabelen de afbeeldingsbeschrijving hier in
Duwbodem nieuw
In veld nieuwe variabelen schrijf “Pad”
In veld nieuwe waarde Schrijf directory in map bin in jdk like
“C:\Program Files\Java\jdk1.8.0_191\bin”
maar in mijn besturingssysteem werk alleen deze “C:\Program Files\Java\jdk1.8.0_191\bin\javac.exe”
voer hier de afbeeldingsbeschrijving in
druk 3 keer op ok

Start Cmd.
Ik duw onderste ramen + R.
Schrijf dan cmd.
Schrijf in cmd “cd (uw map met code )” eruit als C:\Users\user\IdeaProjects\app\src.
Schrijf dan “javac (naam van je hoofdklasse voor je programma).java” lijkt op blabla.java
en javac maak bytecode zoals (naam van uw hoofdklasse).klasse in uw map.
laatste schrijf in cmd “java (naam van je hoofdklasse)” en mijn programma begint te werken


Antwoord 10

Om deze fout te voorkomen, moet u het javac-commando gebruiken met de .java-extensie.

Javac DescendingOrder.java <- dit werkt perfect.


Antwoord 11

Als je meerdere bestanden op dezelfde regel compileert, zorg er dan voor dat je javac maar één keer gebruikt en niet voor elk klasbestand.

Onjuist:

Correct:


Antwoord 12

Ik heb een jar-bestand gemaakt van een Maven-project
(door mvn-pakketof mvn-installatiete schrijven)

daarna open ik de cmd , ga naar de jar-richting en dan

om deze code uit te voeren de

java -cp FILENAME.jar package.Java-Main-File-Name-Class

Bewerkt: na het invoeren van het Pom-bestand, declareer de main om de code uit te voeren:

java -jar FILENAME.JAR

Other episodes