kesalahan javac: Nama kelas hanya diterima jika pemrosesan anotasi secara eksplisit diminta

113

Saya mendapatkan kesalahan ini ketika saya mengkompilasi program java saya:

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

Berikut adalah kode java (Saya menjalankan ini di 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);
        }
    }
}

Ini perintah javac:

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

Bagaimana cara mengkompilasi program ini?

pengguna513164
sumber

Jawaban:

132

Anda setidaknya perlu menambahkan .javaekstensi ke nama file di baris ini:

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

Dari faq resmi :

Nama kelas, 'HelloWorldApp', hanya diterima jika pemrosesan anotasi secara eksplisit diminta

Jika Anda menerima kesalahan ini, Anda lupa menyertakan sufiks .java saat menyusun program. Ingat, perintahnya adalah javac HelloWorldApp.java bukan javac HelloWorldApp.

Juga, dalam contoh javac kedua Anda, (yang sebenarnya Anda sertakan .java), Anda perlu menyertakan semua file .jar yang diperlukan untuk kompilasi.

aioobe
sumber
1
itu juga, tapi saya pikir masih tidak akan menghasilkan kesalahan khusus itu. Seharusnya menghasilkan "file tidak ditemukan" atau sesuatu seperti itu.
jwenting
Saya setuju. Terutama karena itu adalah kesalahan yang mudah dilakukan (karena .classharus dihilangkan saat meluncurkan dengan java).
aioobe
"Nama kelas, 'HelloWorldApp', hanya diterima jika pemrosesan anotasi secara eksplisit diminta". Sungguh cara yang bodoh untuk mengatakan file tidak ditemukan. Atau pesan kesalahan yang seharusnya dirujuk? Saya hanya dapat menemukan perbaikan ini, tetapi tidak mengapa pesan kesalahan ditulis seperti itu.
masterxilo
1
Dengan mengaktifkan pemrosesan anotasi, Anda dapat membuat kelas secara terprogram selama kompilasi. Jadi dengan penjelasan pengolahan Anda bisa sebenarnya kompilasi sesuatu meskipun file tidak ada (yaitu Anda membuat bagian yang hilang dengan cepat). Memang, pesan kesalahan itu menyesatkan. Saya akan menghubungi Anda kembali jika saya memeriksanya lebih jauh.
aioobe
19

Saya bingung dengan ini juga karena saya memasukkan ekstensi .Java ... lalu saya perhatikan ibu kota J.

Ini juga akan menyebabkan kesalahan "pemrosesan anotasi":

javac myclass.Java 

Sebaliknya, seharusnya:

javac myclass.java 
Tom Warfield
sumber
6

Menggunakan javac ClassName.java untuk mengompilasi program, lalu gunakan java ClassName untuk menjalankan kode yang telah dikompilasi. Anda tidak dapat mencampur javac dengan ClassName saja (tanpa ekstensi java).

Yong Yuan
sumber
5

Kesalahan "Nama kelas hanya diterima jika pemrosesan anotasi diminta secara eksplisit" dapat disebabkan oleh satu atau beberapa hal berikut:

  1. Tidak menggunakan ekstensi .java untuk file java Anda saat kompilasi.
  2. Kapitalisasi yang tidak tepat dari ekstensi .java (yaitu .Java) saat mengompilasi.
  3. Kesalahan ketik lainnya di ekstensi .java saat kompilasi.
  4. Saat mengkompilasi dan menjalankan pada saat yang sama, lupa menggunakan '&&' untuk menggabungkan dua perintah (yaitu javac Hangman.java java Hangman). Saya butuh waktu 30 menit untuk mengetahuinya, yang saya perhatikan dengan menjalankan kompilasi dan menjalankan program secara terpisah, yang tentu saja bekerja dengan sangat baik.

Ini mungkin bukan daftar lengkap penyebab kesalahan ini, tetapi ini adalah penyebab yang saya sadari sejauh ini.

joshgoldeneagle
sumber
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

Jadi jika Anda tidak sengaja setelah kompilasi lagi gunakan javacuntuk menjalankan program.

chandan
sumber
3

Saya mengetahui bahwa Anda juga bisa mendapatkan kesalahan ini dengan menyimpan file sumber dalam folder bernama Java

David Miller
sumber
2

Saya rasa ini juga karena kompilasi yang salah ..

jadi untuk linux (ubuntu) .....

javac file.java

file java

Amol Jagdale
sumber
3
Jawaban harus mencoba menjelaskan secara rinci dalam menunjukkan mengapa masalah tersebut disebabkan di tempat pertama dan kemudian menunjukkan solusinya (jika tersedia)
Coder
1

Bagaimana Anda dapat mereproduksi kesalahan samar ini di terminal Ubuntu:

Taruh ini di file bernama Main.java:

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

Kemudian kompilasi seperti ini:

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

Itu karena Anda tidak menentukan .javadi akhir Main.

Lakukan seperti ini, dan berhasil:

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

Tampar dahi Anda sekarang dan mengeluh bahwa pesan kesalahannya sangat samar.

Eric Leschinski
sumber
2
Anda juga tidak: D! Anda menulis Main tanpa .java di kedua contoh!
freerunner
1

Mungkin Anda bisa mengkompilasi dengan nama file daripada nama metode .... Periksa sekali saya juga membuat kesalahan yang sama tetapi saya memperbaikinya dengan cepat ..... # selamat Coding

Sai Saran
sumber
0

unduh dulu jdk dari https://www.oracle.com/technetwork/java/javase/downloads/index.html . Kemudian di pencarian tulis Edit variabel lingkungan Sistem Di jendela terbuka saya tekan bagian bawah disebut Variabel Lingkungan Kemudian di variabel Sistem masukkan deskripsi gambar di sini Dorong bawah baru Di bidang variabel baru tulis "Path" Di bidang nilai baru Tulis direktori di folder bin di jdk seperti " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "tetapi di OS saya hanya berfungsi ini" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe " masukkan deskripsi gambar di sini tekan ok 3 kali

Mulai Cmd. Saya mendorong jendela bawah + R. Kemudian menulis cmd. Dalam cmd tulis "cd (direktori Anda dengan kode)" terlihat seperti C: \ Users \ user \ IdeaProjects \ app \ src. Kemudian tulis "javac (nama kelas utama Anda untuk program Anda) .java" terlihat seperti blabla.java dan javac membuat kode byte seperti (nama kelas utama Anda) .class di direktori Anda. terakhir tulis di cmd "java (nama kelas utama Anda)" dan program saya mulai bekerja

Tuan tintin
sumber
0

Kesalahan: nama kelas hanya diterima jika pemrosesan anotasi secara eksplisit diminta

Untuk menghindari kesalahan ini, Anda harus menggunakan perintah javac dengan ekstensi .java.

Javac DescendingOrder.java <- ini bekerja dengan sempurna.

Avnish
sumber
0

Jika Anda mengompilasi beberapa file dalam satu baris, pastikan Anda menggunakan javac hanya sekali dan tidak untuk setiap file kelas.

Salah: masukkan deskripsi gambar di sini

Benar: masukkan deskripsi gambar di sini

kiran
sumber