ข้อผิดพลาด 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) ที่คุณต้องการที่จะรวมทั้งหมดที่จำเป็นไหไฟล์ที่จำเป็นสำหรับการรวบรวม


1
เช่นกัน แต่ก็ยังไม่ได้รับข้อผิดพลาดที่ฉันคิด ควรให้ "ไม่พบไฟล์" หรือบางสิ่งตามบรรทัดเหล่านั้น
เข้ามาใน

ฉันเห็นด้วย โดยเฉพาะอย่างยิ่งเนื่องจากเป็นข้อผิดพลาดที่ทำได้ง่าย (เนื่องจาก.classควรละเว้นเมื่อเปิดตัวด้วยjava)
aioobe

"ชื่อคลาส" HelloWorldApp "จะได้รับการยอมรับก็ต่อเมื่อมีการร้องขอการประมวลผลคำอธิบายประกอบอย่างชัดเจน" ช่างเป็นวิธีที่โง่มากที่จะบอกว่าไม่พบไฟล์ หรือข้อความแสดงข้อผิดพลาดที่ควรอ้างถึงคืออะไร? ฉันสามารถค้นหาการแก้ไขนี้ได้ แต่ไม่พบว่าเหตุใดข้อความแสดงข้อผิดพลาดจึงเป็นแบบนั้น
masterxilo

1
เมื่อเปิดใช้งานการประมวลผลคำอธิบายประกอบคุณสามารถสร้างคลาสโดยใช้โปรแกรมในระหว่างการคอมไพล์ ดังนั้นด้วยการประมวลผลคำอธิบายประกอบคุณสามารถรวบรวมบางสิ่งได้แม้ว่าไฟล์นั้นจะไม่มีอยู่จริง (เช่นคุณสร้างส่วนที่ขาดหายไปได้ทันที) จริงอยู่ข้อความแสดงข้อผิดพลาดทำให้เข้าใจผิด ฉันจะติดต่อกลับหาคุณหากตรวจสอบเพิ่มเติม
aioobe

19

ฉันก็อึ้งกับเรื่องนี้เช่นกันเพราะฉันรวมนามสกุล. Java ... จากนั้นฉันก็สังเกตเห็นเมืองหลวง J

นอกจากนี้ยังจะทำให้เกิดข้อผิดพลาด "การประมวลผลคำอธิบายประกอบ":

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 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สำหรับการรันโปรแกรม



2

ฉันคิดว่านี่เป็นเพราะการเรียบเรียงที่ไม่ถูกต้อง ..

ดังนั้นสำหรับ linux (ubuntu) .....

ไฟล์ javac.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 จากนั้นในการค้นหาให้เขียนแก้ไขตัวแปรสภาพแวดล้อมของระบบในหน้าต่างที่เปิดอยู่ฉันกดด้านล่างที่เรียกว่าตัวแปรสภาพแวดล้อมจากนั้นในตัวแปรระบบให้ป้อนคำอธิบายรูปภาพที่นี่ กดด้านล่างใหม่ในฟิลด์ตัวแปรใหม่เขียน "เส้นทาง" ในฟิลด์ค่าใหม่เขียนไดเร็กทอรีในโฟลเดอร์ bin ใน jdk เช่น " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "แต่ในระบบปฏิบัติการของฉันทำงานได้เฉพาะ" C: \ Program Files \ 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

Error : class name only accepted if annotation processing is explicitly request

เพื่อหลีกเลี่ยงข้อผิดพลาดนี้คุณควรใช้คำสั่ง javac กับนามสกุล. java

Javac DescendingOrder.java <- งานนี้สมบูรณ์แบบ


0

หากคุณรวบรวมไฟล์หลายไฟล์ในบรรทัดเดียวกันตรวจสอบให้แน่ใจว่าคุณใช้ javac เพียงครั้งเดียวไม่ใช่สำหรับทุกไฟล์คลาส

ไม่ถูกต้อง: enter image description here

แก้ไข: enter image description here

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.