2012-03-22 13 views
12

को पुनः लोड करने के लिए नया क्लासलोडर बनाएं, मैं हर बार अपनी विधि कहलाता हूं, मैं एक नया ClassLoader बनाना चाहता हूं।कक्षा

तो मैं अपने प्रोग्राम से बाहर निकले बिना class पुनः लोड कर सकता हूं।

एक तरीका है कि मैं class को ClassLoader द्वारा लोड कैसे कर सकता हूं, यह भी एक समाधान होगा।

मैं इसे कैसे प्राप्त कर सकता हूं?

+0

मैं loadClass ("string") के साथ एक JavaCompiler स्रोतकोड संकलित वर्ग लोड करता हूं, तो मैं इस कक्षा को JUnitCore के साथ चलाता हूं। उसके बाद मैं * .java में स्रोत कोड संपादित करता हूं, इसे JavaCompiler के साथ संकलित करता हूं और इसे फिर से लोड करना चाहता हूं। – ctekk

+1

एक अच्छे उपयोग के मामले के लिए दिलचस्प सवाल। +1 –

उत्तर

8

मैं यहाँ एक अच्छा समझाया जवाब मिला:

http://www.exampledepot.com/egs/java.lang/reloadclass.html

महत्वपूर्ण बात है, दो द्विआधारी फ़ोल्डरों है मेरे मामले में: testcases के लिए एक और कार्यक्रम स्रोत के लिए एक।

उद्धरण:

URL[] urls = null; 
try { 
    // Convert the file object to a URL 
    File dir = new File(System.getProperty("user.dir") 
     +File.separator+"dir"+File.separator); 
    URL url = dir.toURL();  // file:/c:/almanac1.4/examples/ 
    urls = new URL[]{url}; 
} catch (MalformedURLException e) { 
} 

try { 
    // Create a new class loader with the directory 
    ClassLoader cl = new URLClassLoader(urls); 

    // Load in the class 
    Class cls = cl.loadClass("MyReloadableClassImpl"); 
+0

बस जोड़ने के लिए - यह समाधान केवल तभी काम करता है जब आपकी रीलोडेड क्लास में कोई विधि हटाना/नया वर्ग संदर्भ न हो। इस दृष्टिकोण के साथ समस्या यह है कि अगर कोई पहले निर्भर वर्गों को जोड़ने के लिए fogets, यह NoClassDefFoundError बना सकता है। सबसे अच्छी बात यह है कि एप्लिकेशन को पूरी तरह से रोक दिए बिना सभी कक्षाओं को फिर से लोड करना है। – ha9u63ar

5

इस देखा था? ClassLoader Load/Reload Example

मुझे लगता है कि यह ब्लॉग आपकी आवश्यकता को पूरा कर सकता है।