2010-03-30 20 views
10

MyClass.java: कि MyClass.java फ़ाइल संकलित SimpleCompileTest.java के लिएनल पॉइंटर एक्सेप्शन जावा संकलक एपीआई

package test; 
public class MyClass { 
    public void myMethod(){ 
     System.out.println("My Method Called"); 
    } 
} 

लिस्टिंग।

SimpleCompileTest.java:

package test; 
import javax.tools.*; 
public class SimpleCompileTest { 
    public static void main(String[] args) { 
String fileToCompile = "test" + java.io.File.separator +"MyClass.java"; 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
int compilationResult = compiler.run(null, null, null, fileToCompile); 
     if(compilationResult == 0){ 
      System.out.println("Compilation is successful"); 
     }else{ 
      System.out.println("Compilation Failed"); 
     } 
    } 
} 

मैं SimpleCompileTest वर्ग को क्रियान्वित कर रहा हूँ और एक NullPointerException रही। ToolProvider.getSystemJavaCompiler() शून्य लौट रहा है। क्या कोई मुझे बता सकता है कि कोड

+0

क्या आप टैग के साथ अपना कोड संपादित कर सकते हैं? – bdhar

+2

तो आपकी समस्या यह है कि 'ToolProvider.getSystemJavaCompiler() 'शून्य लौटाता है? – Gabe

उत्तर

16

मुझे संदेह है कि आप this problem में चल रहे हैं - जेडीके के बजाय जेआरई के साथ कोड चला रहे हैं।

जब आप SimpleCompileTest चलाते हैं, तो स्पष्ट रूप से java.exe के संस्करण को निर्दिष्ट करने का प्रयास करें, जिसे आप अपनी जेडीके निर्देशिका में से एक के रूप में उपयोग कर रहे हैं।

+1

आप Java.exe के संस्करण को स्पष्ट रूप से निर्दिष्ट कैसे करते हैं जिसका उपयोग आप अपने जेडीके में कर रहे हैं? मैंने 'रन एएस' की कोशिश की लेकिन यह पहले से ही 'परियोजना जेआरई' जेआरई – CodyBugstein

+1

@ इमरे के रूप में चुने गए: मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं - यदि यह चयनित जेआरई है, तो यही चल जाएगा। यदि आप एक अलग चाहते हैं, तो एक अलग जेआरई का चयन करें। ऐसा लगता है कि आपको अपनी * सटीक * समस्या के साथ एक नया प्रश्न पूछने की आवश्यकता है। –

+1

आपके उत्तर में आप कहते हैं: "जब आप SimpleCompileTest चलाते हैं, तो java.exe के संस्करण को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें जिसे आप अपनी जेडीके निर्देशिका में से एक के रूप में उपयोग कर रहे हैं।" मैं पूछ रहा हूँ, तुम यह कैसे करते हो? – CodyBugstein

0

यह जावा एप्लिकेशन के साथ टूल.जर सहित विस्तार से काम कर रहा है लेकिन वेब एप्लिकेशन के लिए काम नहीं कर रहा है। Nullpointer फेंकता

15

मुझे एक ही त्रुटि मिली। हो सकता है कि मैं इस सवाल का जवाब देने में बहुत देर हो चुकी हूं, लेकिन मैं अपने अनुभव साझा करता हूं, इससे भविष्य में किसी और मुद्दे का सामना करने में मदद मिल सकती है। मैं स्रोत कोड के साथ Compile Java Files At Runtime पर खेल रहा था।

मुझे उल्लेख किया गया है कि java.lang.NullPointerException प्राप्त हो रहा था। मैंने System.out.println(System.getProperty("java.home")); के साथ जावा होम निर्देशिका मुद्रित की, और ध्यान दिया कि मेरी ग्रहण JRE1.7 के बजाय जेडीके 1.7 का उपयोग करने के लिए मेरी वरीयताओं को बदलने के बाद भी "C:\Program Files\Java\jre7" पर इंगित कर रहा था।

मैं इस तरह प्रणाली संपत्ति की स्थापना द्वारा JDK1.7 के उपयोग के लिए मजबूर द्वारा एक समाधान पाया:

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02"); 

तब मैं अपने कार्यक्रम संकलित और किसी भी NullPointerException नहीं मिला।

+0

आप महान प्रिय हैं। आपने पिछले 3 सप्ताह की अपनी समस्या हल कर दी है। धन्यवाद –

+0

मैंने इसे [संकलन-टूलकिट] (https://code.google.com/p/compilation-toolbox/) बनाने के लिए करने की कोशिश की। मुझे 'System.setProperty ("java.home", "सी: \\ प्रोग्राम फ़ाइलें \\ जावा \\ jdk1.7.0_02 \ jre") का उपयोग करना था; इसे काम करने के लिए। –

+0

यह मेरे लिए भी काम करता है! धन्यवाद रशीद! – CodyBugstein

0

आपूर्ति: उपर्युक्त उत्तर प्रोग्राम के भीतर java.home सिस्टम प्रॉपर्टी सेट करना है। यह मेरे लिए भी काम करता है, लेकिन यह एक बहुत ही सामान्य समाधान नहीं है, क्योंकि आपने एक जेडीके संस्करण के लिए हार्ड-कोड किया है। जब मैं प्रोग्राम चलाता हूं तो विकल्प का उपयोग अब मैं कमांड लाइन पर "जावा" को पूरा पथ देना चाहता हूं। इस तरह के रूप में (ऊपर के उदाहरण के साथ संगत):

C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram 

JDK संस्करण का पूर्ण पथ देते कि, कार्यक्रम चल रहा है कि संस्करण है ताकि एक ही है कि ToolProvider.getSystemJavaCompiler साथ दिलवाया किया जाएगा() है का मतलब है,

1

मैं एक ही समस्या

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

अशक्त लौट रहा था हो रही थी।

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31"); 

का उपयोग करने के बाद भी शून्य वापस आ रहा था।

हालांकि यह समस्या में Java\jdk1.8.0_31\lib में मिली है, यदि आप जेडीके का उपयोग कर रहे हैं। मैंने जो किया वह project-->properties-->Java Build Path-->order and export--> पर जाना था और अन्य जेआरई और परियोजनाओं के शीर्ष पर tool.jar स्थानांतरित किया गया था। इससे मुझे आपकी मदद से शून्य उम्मीद से छुटकारा पाने में मदद मिली। संकलित करें ... :-)

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