2011-08-15 15 views
9

मैं linux कमांड लाइन से test.class फ़ाइल चलाने की कोशिश कर रहा हूं। मैंने javac test.java का उपयोग कर फ़ाइल संकलित की है जिसने test.class फ़ाइल बनाई है। जब मैं java test कमांड चलाता हूं तो यह एक वर्ग को अपवाद नहीं मिला है। मैंने उसी परिणाम के साथ पैकेज नाम निर्दिष्ट करने का भी प्रयास किया। यहां आउटपुट है, क्या कोई मदद कर सकता है? मेरा मानना ​​है कि Google खोजों के अनुसार मेरा वाक्यविन्यास सही है।जब मैं लिनक्स में कमांड लाइन से जावा क्लास फ़ाइल चलाता हूं तो मुझे NoClassDefFoundError क्यों मिल रहा है?

javac MyFile.java 

फिर जावा का उपयोग कर

java MyFile 

आप इस कर रहे हैं फ़ाइल को चलाने और यह अभी भी नहीं करता है:

[[email protected] usr]# java test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: testJava/test) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: test. Program will exit. 
+0

आपकी कक्षा में घोषित पैकेज क्या है? साथ ही, क्या आपकी निर्देशिका संरचना पैकेज घोषणा की नकल करता है? – Jeremy

उत्तर

4

उपयोग testJava

+0

इस तरह मैंने इसे अतीत में किया है लेकिन किसी कारण से यह काम नहीं कर रहा है। यह पहली बात थी जिसकी मैंने कोशिश की थी। – tier1

+0

@tkcsam: क्या आपकी 'usr' निर्देशिका में' testJava' है, क्या आप कृपया ls कमांड का उपयोग करके 'usr' और' testJava' निर्देशिका दोनों की सामग्री मुद्रित कर सकते हैं? – Ankur

+0

आह आप मुझे सही उत्तर में ले जाते हैं! मेरे पास testJava direcory नहीं था। सबको धन्यवाद! – tier1

8

आप javac के साथ अपने जावा फाइल संकलन करने की जरूरत काम, इसका मतलब है कि आपको यह सुनिश्चित करने की ज़रूरत है कि फ़ाइल के अंदर फ़ाइल और वर्ग का नाम समान नाम है ... इसलिए MyFile.java में

class MyFile 
    { 
    // ... 
    public static void main(String[] args) 
    { 
     // ... 
    } 
    // ... 
    } 
+0

मैंने यह किया था। मैंने संकलित किया और इसे चलाने के लिए प्रयास किया जैसा कि आप दिखाते हैं लेकिन यह किसी कारण से कक्षा नहीं ढूंढ सकता – tier1

+0

यदि आप उदाहरण के लिए एक नई फाइल बनाते हैं vi या vim, MyFile.java नाम दिया गया है, फ़ाइल में उपरोक्त कोड को काटकर चिपकाएं, सहेजें, और जावैक और जावा लाइनें करें, क्या आपको वही त्रुटि मिलती है? निर्देशिका में कमांड लाइन से यह सब करें जहां आप MyFile को सहेजते हैं। कुछ भी फैंसी का प्रयोग न करें। यह जानना मुश्किल है कि यह एक कोड समस्या है, जावा समस्या है, या एक ओएस/एफएस समस्या है। – Patrick87

+0

एचएम यह काम करता है जब मैं आपके जैसा सुझाव देता हूं। यद्यपि आपका उदाहरण पैकेज नाम निर्दिष्ट नहीं करता है ... – tier1

1

की पेरेंट निर्देशिका से java testJava.test अपने वर्ग मान लिया जाये कि इस तरह दिखता है:

package javaTest; 

public class test{ 
    public static void main(String[] a){ 
     System.out.println("Test"); 
    } 
} 

फिर संकलन और फ़ाइल को चलाने के लिए, आप मूल रूप से ऐसा करते हैं:

$ ls 
testJava 
$ ls testJava 
test.java 
$ javac testJava/test.java 
$ java testJava.test 
Test 

इसका क्या अर्थ है कि आपको कक्षा को अपने पूर्ण योग्य नाम के साथ चलाने के लिए है, जिसमें कक्षा का पैकेज नाम शामिल है। आपको इसे भी करना है सेनिर्देशिका जो आपके पैकेज की जड़ को संगत करती है। (जब तक आप -cp ध्वज के साथ "रूट" निर्देशिका निर्दिष्ट नहीं करते हैं।)

1

मुझे भी शुरुआत में समस्या थी।

जावा-सीपी। टेस्ट

यह link आज़माएं और मुझे लगता है कि यह आपकी मदद कर सकता है।

+0

हमेशा रखना भूल जाते हैं। सीपी में, डुनो क्यों वे इसे डालते हैं। धन्यवाद दोस्त!! मैं एक महीने में फिर से वापस आऊंगा: डी –

संबंधित मुद्दे

 संबंधित मुद्दे