помилка javac: назви класів приймаються лише в тому випадку, коли явно запитується обробка анотацій


113

Я отримую цю помилку, коли складаю свою програму java:

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

Ось код java (я запускаю це на 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);
        }
    }
}

Ось команда javac:

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

Як скласти цю програму?

Відповіді:


132

Вам потрібно принаймні додати .javaрозширення до імені файлу в цьому рядку:

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

З офіційного запису :

Назви класів 'HelloWorldApp' приймаються лише в тому випадку, коли явно вимагається обробка анотацій

Якщо ви отримали цю помилку, ви забули включити суфікс .java під час компіляції програми. Пам'ятайте, що команда - javac HelloWorldApp.java, а не javac HelloWorldApp.

Крім того, у вашому другому прикладі javac (в який ви насправді включені .java) вам потрібно включити всі необхідні .jar-файли, необхідні для компіляції.


1
це теж, але все-таки не принесло б цієї особливої ​​помилки, я думаю. Повинні були отримати "файл не знайдено" або щось у цьому рядку.
1111

Я погодився б. Тим більше, що це легка помилка (оскільки .classслід запускати при запуску java).
aioobe

"Імена класів 'HelloWorldApp' приймаються лише в тому випадку, коли явно запитується обробка анотацій". Який дурний спосіб сказати файл не знайдено. Або на що повинно посилатися повідомлення про помилку? Я можу знайти це виправлення, але не чому повідомлення про помилку формулюється таким чином.
masterxilo

1
Якщо включена обробка анотацій, ви можете генерувати класи програмно під час компіляції. Тож при обробці анотацій ви могли насправді щось скомпілювати, навіть якщо файл не існує (тобто ви створюєте відсутні частини на льоту). Звичайно, повідомлення про помилку вводить в оману. Я повернусь до вас, якщо я загляну далі.
aioobe

19

Мене це також наткнуло, бо я включав розширення .Java ... тоді я помітив столицю Дж.

Це також призведе до помилки "обробка анотацій":

javac myclass.Java 

Натомість це повинно бути:

javac myclass.java 

6

Використовуючи javac ClassName.java для компіляції програми, потім використовуйте java ClassName для виконання скомпільованого коду. Ви не можете змішувати javac лише з ClassName (без розширення java).


5

Помилка "Імена класів приймаються лише в тому випадку, якщо явно запитується обробка анотацій" може бути викликана одним або декількома з наступних:

  1. Не використовуючи розширення .java для вашого файлу Java під час компіляції.
  2. Неправильне використання великої літери розширення .java (тобто .Java) при компілюванні.
  3. Будь-які інші помилки в розширенні .java під час компіляції.
  4. При одночасному компілюванні та запуску забувайте використовувати "&&" для об'єднання двох команд (тобто javac Hangman.java java Hangman). Щоб розібратися в цьому мені знадобилося 30 хвилин, що я помітив, запустивши компіляцію та запустивши програму окремо, що, звичайно, спрацювало чудово.

Це може бути не повним переліком причин цієї помилки, але це причини, про які я знаю поки що.


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

Тож якщо ви помилково після компіляції знову використовуєте javacдля запуску програми.


3

Я дізнався, що ви також можете отримати цю помилку, зберігаючи вихідний файл у папці під назвою Java


2

Я думаю, це також через неправильну компіляцію ..

так що для linux (ubuntu) .....

javac file.java

файл Java


3
У відповідях слід спробувати детальніше вказати, чому проблема викликається в першу чергу, а потім вказати на рішення (якщо таке є)
Coder

1

Як можна відтворити цю криптографічну помилку на терміналі Ubuntu:

Помістіть це у файл під назвою Main.java:

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

Потім складіть його так:

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

Це тому, що ви не вказали .javaнаприкінціMain .

Зробіть це так, і це працює:

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

Пляскайте чолом зараз і бурмотіть, що повідомлення про помилку настільки виразне.


2
ви не зробили: D! ви написали Main без .java в обох прикладах!
freerunner

1

Можливо, ви можете компілювати ім'я файлу замість імені методу .... Перевірте, коли я теж зробив ту саму помилку, але я швидко її виправив ..... # happy Coding


0

спочатку завантажте jdk з https://www.oracle.com/technetwork/java/javase/downloads/index.html . Потім у пошуку напишіть Редагувати змінні системного середовища У відкритому вікні я натискаю внизу під назвою Змінні середовища. Потім у системні змінні введіть опис зображення тут. Поштовх знизу новий. C: \ програмні файли \ Java \ jdk1.8.0_191 \ bin ", але в моїй ОС працюють лише цей" C: \ програмні файли \ Java \ jdk1.8.0_191 \ bin \ javac.exe ", введіть тут опис зображення, натисніть 3 рази ОК

Запустіть Cmd. Я натискаю вікна внизу + R. Потім записую cmd. У cmd записати "cd (ваш каталог із кодом)" виглядає як C: \ Users \ user \ IdeaProjects \ app \ src. Тоді напишіть "javac (назва вашого основного класу для вашої програми) .java" виглядає як blabla.java, а javac створити байтовий код типу (назва вашого основного класу) .class у вашому каталозі. востаннє напишіть у cmd "java (ім'я вашого основного класу)" і моя програма розпочне роботу


0

Помилка: ім'я класу приймається лише в тому випадку, якщо явно запит на обробку приміток

Щоб уникнути цієї помилки, слід використовувати команду javac з розширенням .java.

Javac DescendingOrder.java <- ця робота ідеально.


0

Якщо ви збираєте кілька файлів в одному рядку, переконайтеся, що ви використовуєте javac лише один раз, а не для кожного файлу класу.

Неправильно: введіть тут опис зображення

Правильно: введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.