2011-12-15 21 views
6

मैं ओएसजीआई आधारित डेस्कटॉप एप्लिकेशन लिखने की कोशिश कर रहा हूं। मेरे पास स्विंग जेफ्रेम है और मैं मॉड्यूल (अन्य बंडल) जोड़ने के लिए संभावनाएं जोड़ना चाहता हूं। मैं EclipseZone OSGi at JSig tutorial के माध्यम से चला गया, लेकिन प्रत्येक एप्लिकेशन ओएसजीआई फ्रेमवर्क से शुरू किया गया है (इस मामले में, Knopflerfish ओएसजीआई डेस्कटॉप)।डेस्कटॉप स्टैंडअलोन एप्लिकेशन में ओएसजीआई का उपयोग

तो मेरा सवाल यह है कि क्या ओएसजीआई फ्रेम के बिना एप्लिकेशन को शुरू करने का विकल्प है? मैं knwo, कोड से, एक बंडल के गुणों को बदलना संभव है, लेकिन इस तरह एक ढांचे के गुणों को बदलने के लिए कैसे? (उदाहरण के लिए डिफ़ॉल्ट बंडल भंडारण स्थान, तो डिफ़ॉल्ट कार्यवाही जब बंडल स्थान आदि? में है)

public class MainFrame extends ServiceTracker implements BundleActivator { 

    public MainFrame(BundleContext context, JToolBar toolBar) { 
     // select, which services is the bundle tracking 
     super(context, JMenu.class.getName(), null); 
    } 

    @Override 
    public void start(BundleContext context) throws Exception { 
     //display a JFrame 
    } 

    @Override 
    public void stop(BundleContext context) throws Exception { 
     //hide a JFrame 
    } 

    @Override 
    public Object addingService(ServiceReference reference) { 
     // Process a Service and return a JMenu 
     return new JMenu(); 
    } 

    @Override 
    public void removedService(ServiceReference reference, Object service) { 
     // remove a JMenu from a JFrame 
    } 

    public static void main(String[] args) { 
     // ???????????????????????????????????????????? 
     // ???????????????????????????????????????????? 
    } 
} 

मैं ऊपर (मैं सिर्फ एक स्केच पोस्ट किया है) एक वर्ग में लिखा है, लेकिन मुझे पता नहीं, क्या करना है मुख्य() फ़ंक्शन में लिखें। यह बंडल Knopflerfish OSGi डेस्कटॉप में ठीक काम करता है, लेकिन मैं इसे इसके बिना चलाने के लिए चाहता हूं।

उत्तर

12

आपका कोड मूल रूप से ठीक है, लेकिन यह लग रहा है आप OSGi ढांचा ही पर अधिक नियंत्रण चाहते हैं। दूसरे शब्दों में, आप जानना चाहते हैं कि ओएसजीआई फ्रेमवर्क कैसे लॉन्च करें और अपना बंडल कैसे शुरू करें। वर्तमान में आपके पास समस्या यह है कि आप किसी और के लॉन्चर (Knopflerfish one) का उपयोग कर रहे हैं जिसमें केएफ जीयूआई कंसोल शामिल है, और आप इसका उपयोग अपने बंडल को स्थापित करने और शुरू करने के लिए कर रहे हैं। हालांकि इसमें से कोई भी जरूरी नहीं है।

AValchev के उत्तर में वह java -jar org.eclipse.osgi.jar -console के साथ विषुव शुरू करने के बारे में बात करता है। उस दृष्टिकोण के साथ समस्या यह है कि यह आपको खाली ओएसजीआई फ्रेमवर्क देता है, इसलिए आपको अपने बंडल को स्थापित करने और शुरू करने के लिए ओएसजीआई खोल में कमांड टाइप करना होगा ... आदर्श भी नहीं!

मुझे लगता है कि आपको अपना लॉन्चर लिखना चाहिए। यह वास्तव में बहुत ही सरल है और इस तरह से किया जा सकता है जो कि किसी विशेष ओएसजीआई फ्रेमवर्क उपकरण से पूरी तरह से स्वतंत्र है। मैंने इसके बारे में कुछ समय पहले blog post में लिखा था।

छद्म कोड में, अपने लांचर आवेदन कुछ इस तरह दिखना चाहिए:

public static void main() { 

    1. get a FrameworkFactory using java.util.ServiceLoader. 
    2. create an OSGi framework using the FrameworkFactory 
    3. start the OSGi framework 
    4. Install your bundle(s). 
    5. Start all the bundles you installed. 
    6. Wait for the OSGi framework to shutdown. 

} 

अपने प्रश्न आप विशेष रूप से बंडल भंडारण स्थान की स्थापना के बारे में पूछने में। यह FrameworkFactory.newFramework विधि में गुजरने वाले मानचित्र में Constants.FRAMEWORK_STORAGE संपत्ति सेट करके किया जा सकता है।

+0

धन्यवाद! ब्लॉग पोस्ट ने वास्तव में इसे हल किया। – Benjamin

+0

ब्लॉग पोस्ट लिंक टूटा हुआ। –

1

यदि आप स्विंग घटकों का उपयोग करना चाहते हैं तो आपको Knopflerfish OSGi डेस्कटॉप की आवश्यकता नहीं है। बस EclipseRT स्टार्टर किट डाउनलोड करें और वहां अपने प्लगइन्स डालें।

OSGi उपयोग का एक और बहुत ही सरल तरीका है:

java -jar org.eclipse.osgi.jar -console 
इस आदेश आप विषुव शुरू कर दिया है के साथ

और आप कंसोल से अपने बंडलों स्थापित कर सकते हैं।

तुम बस शुरू में JFrame initalzation डाल बहुत अच्छा ट्यूटोरियल here

आपके मामले में पा सकते हैं() विधि:

@Override 
public void start(BundleContext context) throws Exception { 
    JFrame jf = new JFrame(); 
    ..... 
} 
-2

मुझे यकीन है कि वास्तव में क्या आप क्या करना चाहते नहीं कर रहा हूँ, लेकिन अगर आप स्विंग अनुप्रयोगों को लिखने के लिए एक मॉड्यूलर तरीका तलाश रहे हैं, फिर नेटबीन प्लेटफ़ॉर्म पर एक नज़र डालें। कोर मॉड्यूल सिस्टम ओएसजीआई नहीं है लेकिन यदि आवश्यक हो तो यह ओएसजीआई मॉड्यूल से "बात" कर सकता है।

1

ग्रहण आरसीपी आवेदन ग्राहकों को लिखने के लिए एक अच्छा विकल्प है। यह पूरी तरह से ओएसजीआई पर आधारित है, और यूआई प्रोग्रामिंग के लिए उपकरणों का समृद्ध सेट भी प्रदान करता है। ग्रहण उन्हें बनाने के लिए विकास पर्यावरण भी प्रदान करता है।

एक बार बनाया गया, आपके पास एक स्टैंडअलोन एप्लिकेशन होगा जो ओएसजीआई पर आधारित होगा, लेकिन ओएसजीआई के साथ कोई बातचीत की आवश्यकता नहीं है, जो मुझे विश्वास है कि आप इसे पूरा करने की कोशिश कर रहे हैं।

Eclipse RCP Tutorial

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