2012-11-05 15 views
7

मैं ओएसजीआई बंडल में जावाएफएक्स 2.2 का उपयोग कैसे कर सकता हूं? मैं अपाचे फेलिक्स का उपयोग कर रहा हूं इसलिए यह कोई ग्रहण परियोजना नहीं है। यह जावा 7 स्थापित के साथ मैक ओएसएक्स पर चलाना चाहिए (जावा 6 ठंडा होगा लेकिन आवश्यक नहीं है)।ओएसजीआई बंडल में जावाएफएक्स 2.2 का उपयोग

मैंने जेएफएक्स पुस्तकालयों को दोबारा बनाने के बारे में कुछ पढ़ा है लेकिन ग्रहण परियोजनाओं के लिए।

बस बंडल में javafx संकुल आयात करना मैनिफेस्ट ने एक अनुपलब्ध आवश्यकता osgi.wiring.package अपवाद बनाया।

उत्तर

7

ई (एफएक्स) क्लिपसे रनटाइम टूल्स का उपयोग करने का प्रयास करें, जिसमें लाइब्रेरी शामिल हैं ताकि जावाएफएक्स को ओएसजीआई पर्यावरण में अच्छी तरह से काम करने की अनुमति मिल सके।

के अनुसार e(fx)clipse site:

दुर्भाग्य JavaFX तो वहाँ विभिन्न स्थानों जो समस्याओं के कारण कर रहे हैं जब OSGi अंदर चल तथ्य JavaFX-बाइनरी उन पर कहीं स्थित हैं से लेकर कर रहे हैं मन में OSGi के साथ लिखा नहीं है सिस्टम, ओएसजीआई के दृश्यता नियमों के कारण कक्षा लोडिंग की बात आती है। ई (fx) Clipse उन सभी समस्याओं से निपटने के हेल्पर लाइब्रेरी JavaFX अनुप्रयोगों ग्रहण विषुव के ontop आसान के रूप में एक लग रहा है के रूप में यह SWT के साथ है और स्विंग

+1

लेकिन मैं SWT और ग्रहण विषुव का उपयोग नहीं कर रहा हूं। क्या ऐसी ओएसजीआई सहायक पुस्तकालय बनाने का कोई और सामान्य तरीका नहीं है? – chrise

+1

मैं अपने प्रश्न पूछने की सलाह देता हूं [ई (एफएक्स) क्लिपसे फोरम] (https://groups.google.com/forum/m/?fromgroups#!forum/efxclipse) – jewelsea

+1

ओएसजीआई बंडल में जावाएफएक्स अभी भी थोड़ा मुश्किल है । ई (एफएक्स) क्लिपसे प्लगइन विषुव के साथ काम कर रहा है लेकिन मुझे इसे अपाचे फेलिक्स के साथ काम नहीं मिला है इसलिए मुझे बूट-क्लासलोडर को jsgafx कक्षाओं को osgi-bundle नहीं जोड़ना पड़ा। उम्मीद है कि आगे एफएक्स संस्करणों में सुधार होगा। – chrise

6

नहीं JavaFX के साथ एक बंडल लेकिन प्रदान करता है और लेखन बनाता JavaFX वर्गों को जोड़ने बूट-क्लासलोडर के लिए काम करेगा। अपाचे फेलिक्स के साथ उदाहरण:

Map<String,String> properties = new HashMap<String, String>(); 
properties.put(Constants.FRAMEWORK_BOOTDELEGATION, "javafx.*,com.sun.javafx.*"); 
properties.put(Constants.FRAMEWORK_BUNDLE_PARENT, Constants.FRAMEWORK_BUNDLE_PARENT_APP); 

FrameworkFactory factory = new org.apache.felix.framework.FrameworkFactory(); 
org.osgi.framework.launch.Framework framework = factory.newFramework(properties); 
framework.init(); 

अब बस JavaFX कक्षाएं किसी भी बंडल से (यदि JavaFX ग्राहक कंप्यूटर पर स्थापित है) का उपयोग करें।

+0

यह एक अच्छा तरीका है। क्या यह केवल आपके ओएसजीआई कंटेनर कॉन्फ़िगरेशन को संशोधित करने की आवश्यकता है और अतिरिक्त कोड की आवश्यकता नहीं है? –

+0

अपाचे करफ वाला कोई व्यक्ति jre.properties फ़ाइल को अपनी/etc निर्देशिका में संशोधित करने का प्रयास कर सकता है? –

11

यह आपको मदद करने के लिए शायद एक छोटे से देर हो चुकी है, लेकिन मैं किसी को भी मामले में एक OSGi पर्यावरण अंदर JavaFX सक्षम करने के लिए एक सरल तरीके से दस्तावेज़ के लिए चाहते हैं, मेरी तरह, अभी भी परेशानी यह कर दिया था ....

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

मैं कोई विशेषज्ञ नहीं हूं, लेकिन इस ब्लॉग में, स्प्रिंगसोर्स से कॉस्टिन लीउ, यह बताता है कि कैसे करें (किसी भी जार के लिए जो सिस्टम क्लासलोडर तक पूर्ण पहुंच मानता है, न केवल जावाएफएक्स) 3 में विभिन्न तरीके:

org.osgi:

http://blog.springsource.org/2009/01/19/exposing-the-boot-classpath-in-osgi/

मैं विकल्प ए, जो मूल रूप से अपने OSGi कंटेनर की कॉन्फ़िग फ़ाइल में OSGi द्वारा निर्दिष्ट संपत्ति (! कोई भी क्रियान्वयन के लिए विशिष्ट नहीं) स्थापित करने का मतलब है उपयोग करने के लिए चुना है .framework.system.packages.extra = javafx.application; संस्करण = 0.0.0 ...

आप इस सार में संपत्ति के पूरे मूल्य देख सकते हैं मैं बनाने की प्रक्रिया है टेड:

https://gist.github.com/renatoathaydes/5021107

मैं मूल रूप से संकुल के सभी जो JavaFX 2.2 जार निर्यात कर सकते हैं के साथ सेट (और मैं बस मेरी अपाचे Karaf, की तैनाती फ़ोल्डर में JavaFX जार छोड़ने के द्वारा इस में पता चला जो स्वतः इसे एक बंडल में बनाता है, और उसके बाद जेनरेट किए गए मेनिफेस्ट को देखता है) ...वैसे, मैंने कराफ द्वारा उत्पन्न बंडल का उपयोग करने की कोशिश की (जो इसे करने के लिए पैक्स-रैप का उपयोग करता है) लेकिन जावाफैक्स आपके वर्गों को लोड करने की कोशिश करने के तरीके के कारण काम नहीं करेगा (जो जावाएफएक्स बंडल के प्रयास में दिखाई नहीं दे रहा है, सभी जेआरई पैकेजों का उल्लेख नहीं करना जावाएफएक्स एक्सेस करने का प्रयास करता है)।

मुझे संदेह है कि मेरे द्वारा जोड़े गए सभी पैकेज वास्तव में आवश्यक नहीं हैं, लेकिन सुरक्षित होने के लिए, मैंने उन सभी को करफ के रैपर द्वारा जेनरेट किया है और जैसा कि यह काम करता है, मैं तब तक नहीं बदलेगा जब तक इसके लिए कोई अच्छा कारण न हो।

अब मेरे किसी भी बंडल जावाएफएक्स का उपयोग कर सकते हैं जब तक jfxrt.jar जेआरई lib फ़ोल्डर में मौजूद है।

+0

संस्करण को 0.0.0 के रूप में घोषित किया गया है क्योंकि बाहरी ओएसजीआई से आने वाले पैकेज संस्करण नहीं हैं, इसलिए आप इसे 'खाली' संस्करण संख्या दें। – Renato

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