javac hatası: Sınıf adları yalnızca ek açıklama işlemenin açıkça talep edilmesi durumunda kabul edilir


113

Java programımı derlerken şu hatayı alıyorum:

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

İşte java kodu (bunu Ubuntu'da çalıştırıyorum).

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);
        }
    }
}

İşte javac komutu:

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

Bu programı nasıl derlerim?

Yanıtlar:


132

En azından .javabu satırdaki dosya adına uzantıyı eklemeniz gerekir :

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

Gönderen resmi sss :

Sınıf adları, 'HelloWorldApp', yalnızca ek açıklama işlemenin açıkça talep edilmesi durumunda kabul edilir

Bu hatayı alırsanız, programı derlerken .java sonekini eklemeyi unuttunuz. Unutmayın, komut javac HelloWorldApp.java, javac HelloWorldApp değil.

Ayrıca, ikinci javac örneğinizde (gerçekten dahil .javaettiğiniz) derleme için gereken tüm gerekli .jar dosyalarını eklemeniz gerekir .


1
bu da, ama yine de sanırım bu belirli hatayı vermezdi. Bir "dosya bulunamadı" veya bu satırlarda bir şey vermiş olmalıydı.
jwenting

Katılıyorum. Özellikle de yapması kolay bir hata olduğu için (çünkü .classbaşlatılırken ihmal edilmelidir java).
aioobe

"Sınıf adları, 'HelloWorldApp', yalnızca açıklama işleminin açıkça talep edilmesi durumunda kabul edilir." Dosya bulunamadı demenin ne kadar aptalca bir yolu. Ya da hata mesajı neye işaret ediyor? Bu düzeltmeyi yalnızca bulabilirim, ancak hata mesajının neden böyle ifade edildiğini bulamıyorum.
masterxilo

1
Ek açıklama işleme etkinleştirildiğinde, derleme sırasında programatik olarak sınıflar oluşturabilirsiniz. Yani açıklama ile işlenmesiyle olabilir aslında derleme şeye dosya yok olsa bile (yani anında eksik parçaları oluşturun). Verilmiş, hata mesajı yanıltıcıdır. Daha derinlemesine bakarsam size geri döneceğim.
aioobe

19

Ben de bu konuda şaşkına döndüm çünkü .Java uzantısını dahil ediyordum ... sonra başkent J.'yi fark ettim.

Bu aynı zamanda "ek açıklama işleme" hatasına da neden olur:

javac myclass.Java 

Bunun yerine şu şekilde olmalıdır:

javac myclass.java 

6

Kullanılması Javac ClassName.java programı derlemek için, daha sonra kullanmak java SınıfAdı derlenmiş kod çalıştırmak için. Javac'ı yalnızca ClassName ile karıştıramazsınız (java uzantısı olmadan).


5

"Sınıf adları yalnızca ek açıklama işleminin açıkça istenmesi durumunda kabul edilir" hatası aşağıdakilerden biri veya birkaçından kaynaklanabilir:

  1. Derleme sırasında java dosyanız için .java uzantısını kullanmamak.
  2. Derleme sırasında .java uzantısının (yani .Java) yanlış büyük harf kullanımı.
  3. Derleme sırasında .java uzantısındaki diğer herhangi bir yazım hatası.
  4. Aynı anda derleyip çalıştırırken, iki komutu birleştirmek için '&&' kullanmayı unutmak (örn. Javac Hangman.java java Hangman). Bunu çözmem 30 dakika kadar sürdü, derlemeyi çalıştırıp programı ayrı ayrı çalıştırdığımda fark ettim ve tabii ki mükemmel çalıştı.

Bu, bu hatanın nedenlerinin tam listesi olmayabilir, ancak şu ana kadar bildiğim nedenler bunlar.


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

Bu yüzden eğer yanlışlıkla derledikten sonra javacbir programı çalıştırmak için kullanın .


3

Bu hatayı, kaynak dosyayı Java adlı bir klasöre depolayarak da alabileceğinizi öğrendim.


2

Bunun da yanlış derlemeden kaynaklandığını düşünüyorum ..

yani linux için (ubuntu) .....

javac file.java

java dosyası


3
Cevaplar, sorunun neden ilk etapta neden olduğunu
Coder

1

Ubuntu terminalinde bu şifreli hatayı nasıl yeniden oluşturabilirsiniz:

Bunu Main.java adlı bir dosyaya koyun:

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

Sonra bunu şu şekilde derleyin:

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

Çünkü .javasonunda belirtmemiştin Main.

Bunu böyle yapın ve işe yarıyor:

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

Şimdi alnınıza vurun ve hata mesajının çok şifreli olduğunu söyleyin.


2
sen de yapmadın: D! Her iki örnekte de .java olmadan Main yazdınız!
freerunner

1

Belki yöntem adı yerine dosya adıyla derliyor olabilirsiniz .... Ben de aynı hatayı yaptım ama çabucak düzelttim bir kez kontrol edin ..... # mutlu Kodlama


0

ilk olarak jdk'yi https://www.oracle.com/technetwork/java/javase/downloads/index.html adresinden indirin . Sonra aramada Sistem ortam değişkenlerini düzenleyin Açık pencerede Ortam Değişkenleri olarak adlandırılan alt tarafa basın Sonra Sistem değişkenlerine görüntü açıklamasını buraya girin Alttaki yeni alana yeni değişkenler "Yol" alanına yeni değer yazın jdk'deki klasör bölmesine dizini yazın " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "ancak işletim sistemimde yalnızca bu" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe "çalışır görüntü açıklamasını buraya girin 3 kez ok tuşuna basın

Cmd'yi başlatın. Alt pencerelere + R basıyorum. Sonra cmd yazıyorum. Cmd'de "cd (kodlu dizininiz)" yazın C: \ Users \ user \ IdeaProjects \ app \ src gibi görünür. Sonra "javac (programınız için ana sınıfınızın adı) .java" yazın blabla.java gibi görünür ve javac dizininizde (ana sınıfınızın adı) .class gibi bayt kodu oluşturur. cmd "java (ana sınıfınızın adı)" olarak son yaz ve programım çalışmaya başlıyor


0

Hata: sınıf adı yalnızca ek açıklama işlemenin açıkça istenmesi durumunda kabul edilir

Bu hatayı önlemek için javac komutunu .java uzantısı ile kullanmalısınız.

Javac DescendingOrder.java <- bu mükemmel çalışıyor.


0

Aynı satırda birden fazla dosya derlerseniz, javac'ı her sınıf dosyası için değil, yalnızca bir kez kullandığınızdan emin olun.

Yanlış: görüntü açıklamasını buraya girin

Doğru: görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.