2010-03-05 16 views
5

मैं जावा रिकॉर्ड/रीप्ले टूल कर रहा हूं और मुझे अपने मुख्य जावा ऐप से जावा एप्लिकेशन लॉन्च करने की आवश्यकता है। मैं आदेश की घटनाओं को रोकने और उन्हें रिकॉर्ड करने के लिए EventDispatchThread के लिए उपयोग की जरूरत है, तो मैं (कोड सरलीकृत टुकड़ा) के साथ प्रतिबिंब के माध्यम से ऐप्लिकेशन को लॉन्च करने हूँ:किसी अन्य जावा एप्लिकेशन से एक जावा एप्लिकेशन लॉन्च करें

Class<?> app = Class.forName(mainClass); 
Method m = app.getMethod("main", new Class[] { String[].class }); 
m.invoke(null, new Object[] { new String[] {} }); 

मैं पहले गतिशील classpath करने के लिए सभी जार लोड और आवेदन लगभग पूरी तरह से लॉन्च हो रहा है।

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

इस समस्या को हल करने के लिए मैं क्या कर सकता हूं? निष्पादन पर्यावरण को गतिशील रूप से बदलें? कोई विचार?

उत्तर

2

मैं लक्ष्य कोड शुरू करते समय अपने कोड को "जावा एजेंट" के रूप में लोड करने का सुझाव दूंगा।

(अपने विधि के साथ आप भी पाएंगे कि प्रणाली वर्ग लोडर गलत है।)

+0

मैं कैसे एक "जावा एजेंट" और क्या है कि बिल्कुल के रूप में कोड को चलाने के लिए जांच करेंगे माध्यम। मैं आपके कंस्ट्रैसिस को समझ नहीं पाया, हालांकि ... – jpsstavares

0

सामान्य में, वहाँ यह करने के लिए कोई रास्ता नहीं है।

http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=30b24551130ee4ffffffffc17df8d7ce8a9c3?bug_id=4117557

आप System.setProperty("user.dir", "C:\\Some\\Location"); कोशिश कर सकते हैं लेकिन यह शायद सभी मामलों के लिए काम नहीं करेगा और तुम अजीब व्यवहार दे देंगे।

यह एक ऐप के लिए एक बहुत ही खराब डिज़ाइन है जिस पर इसे लॉन्च किया गया था।

सबसे अच्छी सलाह जो मैं आपको दे सकता हूं वह है कि आप अपना ऐप उस निर्देशिका से लॉन्च करें जिससे दुर्व्यवहार करने वाला ऐप लॉन्च होने की अपेक्षा करता है (मान लीजिए कि वह निर्देशिका क्या है)।

अन्यथा, नरक, कॉपी/अपने निर्देशिका में डेटा फ़ाइलों को सिमलिंक ताकि ग्राहक एप्लिकेशन उन्हें पा सकते हैं ...

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