javac त्रुटि: वर्ग के नाम केवल तभी स्वीकार किए जाते हैं जब एनोटेशन प्रसंस्करण स्पष्ट रूप से अनुरोध किया जाता है


113

मुझे यह त्रुटि तब मिलती है जब मैं अपने जावा प्रोग्राम को संकलित करता हूं:

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

यहाँ जावा कोड है (मैं इसे 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-files को शामिल करना होगा ।


1
वह भी, लेकिन फिर भी मुझे लगता है कि विशेष त्रुटि उपज नहीं होता। उन लाइनों के साथ एक "फ़ाइल नहीं मिली" या कुछ और प्राप्त करना चाहिए।
jwenting

मुझे स्वीकार होगा। खासकर जब से यह एक आसान गलती है (क्योंकि .classलॉन्च के समय इसे छोड़ दिया जाना चाहिए java)।
obeियोबॉय

"वर्ग के नाम, 'HelloWorldApp', केवल तभी स्वीकार किए जाते हैं, जब एनोटेशन प्रसंस्करण स्पष्ट रूप से अनुरोध किया जाता है"। क्या कहने के लिए एक बेवकूफ तरीका फ़ाइल नहीं मिला। या त्रुटि संदेश को संदर्भित करने के लिए क्या माना जाता है? मैं केवल इस सुधार को ढूँढ सकता हूँ, लेकिन त्रुटि संदेश को इस तरह क्यों नहीं कहा जाता है।
मास्टरएक्सिलो

1
एनोटेशन प्रसंस्करण सक्षम होने के साथ आप संकलन के दौरान प्रोग्रामेटिक रूप से कक्षाएं उत्पन्न कर सकते हैं। तो एनोटेशन प्रोसेसिंग के साथ आप वास्तव में कुछ संकलित कर सकते हैं , भले ही फ़ाइल मौजूद न हो (यानी आप फ्लाई पर लापता भागों को बनाते हैं)। दी गई, त्रुटि संदेश भ्रामक है। अगर मैं इसमें आगे दिखूं तो मैं आपके पास वापस आऊंगा।
aioobe

19

मुझे इससे बहुत धक्का लगा क्योंकि मैं इसमें शामिल था। जावा एक्सटेंशन ... तब मैंने राजधानी जे पर ध्यान दिया।

यह "एनोटेशन प्रोसेसिंग" त्रुटि का कारण भी होगा:

javac myclass.Java 

इसके बजाय, यह होना चाहिए:

javac myclass.java 

6

प्रोग्राम को संकलित करने के लिए javac ClassName.java का उपयोग कर , फिर संकलित कोड को निष्पादित करने के लिए java ClassName का उपयोग करें । आप केवल ClassName (जावा एक्सटेंशन के बिना) के साथ javac नहीं मिला सकते।


5

त्रुटि "वर्ग के नाम केवल तभी स्वीकार किए जाते हैं यदि एनोटेशन प्रसंस्करण स्पष्ट रूप से अनुरोध किया जाता है" निम्न में से एक या अधिक के कारण हो सकता है:

  1. संकलन करते समय अपनी जावा फ़ाइल के लिए .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

मुझे पता चला कि आप जावा नामक फ़ोल्डर में स्रोत फ़ाइल को संग्रहीत करके भी इस त्रुटि को प्राप्त कर सकते हैं


2

मुझे लगता है कि यह गलत संकलन के कारण भी है।

तो लिनक्स (ubuntu) के लिए .....

javac file.java

जावा फ़ाइल


3
उत्तर को इंगित करने के लिए विस्तृत करने का प्रयास करना चाहिए कि समस्या पहले स्थान पर क्यों हो रही है और फिर समाधान को इंगित करें (यदि कोई उपलब्ध है)
कोडर

1

आप उबंटू टर्मिनल पर इस गुप्त त्रुटि को कैसे दोहरा सकते हैं:

इसे 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
आपने या तो नहीं किया: डी! आपने बिना मुख्य .java दोनों उदाहरणों में लिखा!
freerunner

1

हो सकता है कि आप विधि नाम के बजाय फ़ाइल नाम के साथ संकलित कर रहे हों .... एक बार जांच लें कि मैंने भी वही गलती की है, लेकिन मैंने इसे जल्दी ठीक कर लिया है ..... # खुश कोडिंग


0

सबसे पहले https://doracle.com/technetwork/java/javase/downloads/index.html से jdk डाउनलोड करें । फिर खोज लेखन में सिस्टम एनवायर्नमेंट वेरिएबल्स को एडिट करें। ओपन विंडो में मैं एनवायरनमेंट वेरिएबल्स नाम से नीचे की ओर पुश करता हूं। फिर सिस्टम वेरिएबल्स में इमेज डिस्क्रिप्शन यहां एंटर करें। न्यू नीचे फील्ड में नए वेरिएबल्स "Path" इन फील्ड न्यू वेल्यू लिखें फोल्डर बिन में डायरेक्टरी बिन इन jdk जैसे " C: \ Program Files \ Java \ jdk1.8.0_191 \ bin "लेकिन मेरे OS में केवल यह" C: \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe " छवि विवरण दर्ज करें " ठीक है 3 बार दबाएं

Cmd प्रारंभ करें। मैं नीचे की खिड़कियों को धक्का देता हूं + आर फिर सीएमडी लिखता हूं। Cmd में "cd (कोड के साथ आपकी निर्देशिका)" C: \ Users \ user \ IdeaProjects \ app \ _rc जैसा दिखता है। फिर "javac (अपने कार्यक्रम के लिए अपने मुख्य वर्ग का नाम) लिखें। java" blabla.java जैसा दिखता है और javac अपनी निर्देशिका में (जैसे आपके मुख्य वर्ग का नाम) बाइट कोड बनाते हैं। cmd में अंतिम लेखन "जावा (आपके मुख्य वर्ग का नाम)" और मेरा कार्यक्रम काम शुरू करता है


0

त्रुटि: वर्ग नाम केवल तभी स्वीकार किया जाता है जब एनोटेशन प्रसंस्करण स्पष्ट रूप से अनुरोध है

इस त्रुटि से बचने के लिए, आपको .java एक्सटेंशन के साथ javac कमांड का उपयोग करना चाहिए।

Javac DescendingOrder.java <- यह पूरी तरह से काम करता है।


0

यदि आप एक ही पंक्ति में कई फ़ाइलों को संकलित करते हैं, तो सुनिश्चित करें कि आप केवल एक बार javac का उपयोग करें और प्रत्येक वर्ग फ़ाइल के लिए नहीं।

गलत: यहां छवि विवरण दर्ज करें

सही बात: यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.