lỗi javac: Tên lớp chỉ được chấp nhận nếu xử lý chú thích được yêu cầu rõ ràng


112

Tôi gặp lỗi này khi biên dịch chương trình java của mình:

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

Đây là mã java (Tôi đang chạy mã này trên 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);
        }
    }
}

Đây là lệnh javac:

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

Làm cách nào để biên dịch chương trình này?

Câu trả lời:


132

Ít nhất bạn cần thêm .javaphần mở rộng vào tên tệp trong dòng này:

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

Từ câu hỏi thường gặp chính thức :

Tên lớp, 'HelloWorldApp', chỉ được chấp nhận nếu việc xử lý chú thích được yêu cầu rõ ràng

Nếu bạn nhận được lỗi này, bạn đã quên bao gồm hậu tố .java khi biên dịch chương trình. Hãy nhớ rằng, lệnh là javac HelloWorldApp.java không phải javac HelloWorldApp.

Ngoài ra, trong ví dụ javac thứ hai của bạn, (trong đó bạn thực sự đã đưa vào .java), bạn cần bao gồm tất cả các tệp .jar bắt buộc cần thiết để biên dịch.


1
điều đó quá, nhưng tôi nghĩ vẫn sẽ không mang lại lỗi cụ thể đó. Đáng lẽ ra, một "tập tin không tìm thấy" hoặc một cái gì đó dọc theo những dòng đó.
jwenting

Tôi sẽ đồng ý. Đặc biệt vì nó là một sai lầm dễ mắc phải (vì .classnên bỏ qua khi khởi chạy với java).
aioobe

"Tên lớp, 'HelloWorldApp', chỉ được chấp nhận nếu việc xử lý chú thích được yêu cầu rõ ràng". Thật là một cách ngu ngốc để nói rằng không tìm thấy tệp. Hoặc thông báo lỗi có nghĩa là gì? Tôi chỉ có thể tìm thấy bản sửa lỗi này, nhưng không phải tại sao thông báo lỗi lại được ghi như vậy.
masterxilo

1
Với việc kích hoạt xử lý chú thích, bạn có thể tạo các lớp theo chương trình trong quá trình biên dịch. Vì vậy, với xử lý chú thích, trên thực tế, bạn có thể biên dịch một cái gì đó ngay cả khi tệp không tồn tại (tức là bạn tạo nhanh các phần bị thiếu). Được, thông báo lỗi là sai lệch. Tôi sẽ liên hệ lại với bạn nếu tôi xem xét kỹ hơn.
aioobe

19

Tôi cũng bị bối rối bởi điều này vì tôi đã bao gồm phần mở rộng .Java ... sau đó tôi nhận thấy chữ J. viết hoa.

Điều này cũng sẽ gây ra lỗi "xử lý chú thích":

javac myclass.Java 

Thay vào đó, nó phải là:

javac myclass.java 

6

Sử dụng javac ClassName.java để biên dịch chương trình, sau đó sử dụng java ClassName để thực thi mã đã biên dịch. Bạn không thể trộn javac chỉ với ClassName (không có phần mở rộng java).


4

Lỗi "Tên lớp chỉ được chấp nhận nếu xử lý chú thích được yêu cầu rõ ràng" có thể do một hoặc nhiều nguyên nhân sau:

  1. Không sử dụng phần mở rộng .java cho tệp java của bạn khi biên dịch.
  2. Viết hoa không đúng cách của phần mở rộng .java (tức là .Java) khi biên dịch.
  3. Bất kỳ lỗi đánh máy nào khác trong phần mở rộng .java khi biên dịch.
  4. Khi biên dịch và chạy cùng lúc, bạn quên sử dụng '&&' để nối hai lệnh (tức là javac Hangman.java java Hangman). Tôi đã mất khoảng 30 phút để tìm ra điều này, điều mà tôi nhận thấy bằng cách chạy phần biên dịch và chạy chương trình riêng biệt, tất nhiên hoạt động hoàn toàn tốt.

Đây có thể không phải là danh sách đầy đủ các nguyên nhân gây ra lỗi này, nhưng đây là những nguyên nhân mà tôi biết cho đến nay.


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

Vì vậy, nếu bạn do nhầm lẫn sau khi biên dịch lại sử dụng javacđể chạy một chương trình.


3

Tôi được biết rằng bạn cũng có thể gặp lỗi này bằng cách lưu trữ tệp nguồn trong một thư mục có tên Java


2

tôi nghĩ điều này cũng là do biên dịch không chính xác ..

vậy đối với linux (ubuntu) .....

javac file.java

tệp java


3
Câu trả lời nên cố gắng xây dựng trên chỉ ra lý do tại sao vấn đề này đang được gây ra ở nơi đầu tiên và sau đó chỉ ra những giải pháp (nếu có sẵn)
Coder

0

Cách bạn có thể tạo lại lỗi khó hiểu này trên thiết bị đầu cuối Ubuntu:

Đặt cái này vào một tệp có tên Main.java:

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

Sau đó, biên dịch nó như thế này:

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

Đó là vì bạn không chỉ định .javaở cuối Main.

Làm như thế này, và nó hoạt động:

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

Bây giờ vỗ trán và cằn nhằn rằng thông báo lỗi khó hiểu quá.


2
bạn cũng không: D! bạn đã viết Main mà không có .java trong cả hai ví dụ!
freerunner

0

Có lẽ bạn đang biên dịch với tên tệp thay vì tên phương thức .... Hãy kiểm tra một lần tôi cũng mắc lỗi tương tự nhưng tôi đã sửa nó nhanh chóng ..... # happy Coding


0

đầu tiên tải xuống jdk từ https://www.oracle.com/technetwork/java/javase/downloads/index.html . Sau đó, trong tìm kiếm, viết Chỉnh sửa các biến môi trường Hệ thống Trong cửa sổ đang mở, tôi đẩy xuống dưới gọi là Biến môi trường Sau đó, trong Biến hệ thống nhập mô tả hình ảnh vào đây Đẩy dưới cùng mới Trong trường biến mới viết "Đường dẫn" Trong trường giá trị mới Viết thư mục trong thư mục bin trong jdk như " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "nhưng trong hệ điều hành của tôi chỉ hoạt động" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe " nhập mô tả hình ảnh vào đây nhấn ok 3 lần

Khởi động Cmd. Tôi đẩy cửa sổ dưới cùng + R. Sau đó viết cmd. Trong cmd viết "cd (thư mục của bạn với mã)" trông giống như C: \ Users \ user \ IdeaProjects \ app \ src. Sau đó, viết "javac (tên lớp chính cho chương trình của bạn) .java" trông giống như blabla.java và javac tạo mã byte như (tên lớp chính của bạn) .class trong thư mục của bạn. cuối cùng viết trong cmd "java (tên lớp chính của bạn)" và chương trình của tôi bắt đầu hoạt động


0

Lỗi: tên lớp chỉ được chấp nhận nếu xử lý chú thích là yêu cầu rõ ràng

Để tránh lỗi này, bạn nên sử dụng lệnh javac với phần mở rộng .java.

Javac DescendingOrder.java <- điều này hoạt động hoàn hảo.


0

Nếu bạn biên dịch nhiều tệp trong cùng một dòng, hãy đảm bảo rằng bạn chỉ sử dụng javac một lần và không sử dụng cho mọi tệp lớp.

Sai: nhập mô tả hình ảnh ở đây

Chính xác: nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.