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 .java
toevoegen 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 .java
hebt 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:
- De extensie .java voor je java-bestand niet gebruiken bij het compileren.
- Onjuist hoofdlettergebruik van de .java-extensie (d.w.z. .Java) tijdens het compileren.
- Elke andere typefout in de .java-extensie tijdens het compileren.
- 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 javac
om 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 .java
niet 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.
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