2012-06-04 17 views
12

के साथ संकलन और चल रहा है मैं कोड के लाइनों के एक साधारण सेट का उपयोग करके जावाएफएक्स का एक बहुत ही सरल उपयोग करने की कोशिश कर रहा हूं जो मुझे दूसरे स्टैक ओवरफ्लो पेज (here) से मिला है। लेकिन, समस्या स्पष्ट रूप से उस कोड के साथ नहीं है लेकिन निर्माण और चलाने की प्रक्रिया में कुछ और मौलिक है। मैं इस सब पर संकलित करने के लिए नहीं मिल सका सबसे पहलेजावाएफएक्स 2.1

import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
. 
. 
. 
Media medMsg = new Media("msg.mp3"); 
MediaPlayer medplMsg = new MediaPlayer(medMsg); 
medplMsg.play(); 

:

यहाँ मेरी कोड है। आखिरकार मुझे पता चला कि मुझे अपने javac कमांड लाइन पर -classpath c: \ Program Files \ Oracle \ JavaFX 2.1 SDK \ lib \ rt \ jfxrt.jar डालने की आवश्यकता है। (यहां प्रश्नों का एक स्पष्ट परिसर है: यह किसी भी स्पष्ट स्थान (1) में क्यों प्रलेखित नहीं है कि इसकी आवश्यकता है और (2) जावाफ़ैक्स स्थापना का पथ क्या है, यह जानने के लिए वास्तव में कैसे पता लगाना है ?!)

लेकिन, जब मैं कोड चलाता हूं तो मुझे मिलता है:

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/scene/media/Media 

    at progtest.main(progtest.java:120) 
Caused by: java.lang.ClassNotFoundException: javafx.scene.media.Media 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 1 more 

इसका क्या अर्थ है? ऐसा लगता है कि यह रनटाइम पर नहीं जानता है, कक्षा javafx.scene.media.Media कैसे खोजें। लेकिन, मेरे% CLASSPATH% चर में निश्चित रूप से "c: \ Program Files \ Oracle \ JavaFX 2.1 SDK \ lib \ rt \ jfxrt.jar" है।

कोई विचार? आपका अग्रिम में ही बहुत धन्यवाद!

+0

इस्तेमाल किया मुझे लगता है कि आप कुछ अपने स्थापना के साथ गलत है। किसी भी जावाएफएक्स जार को क्लासपाथ पर मैन्युअल रूप से रखना आवश्यक नहीं होना चाहिए। आप अपने जावाएफएक्स एप्लिकेशन को कैसे बना रहे हैं और चला रहे हैं? NetBeans द्वारा प्रदान की गई चींटी स्क्रिप्ट के साथ? – Puce

+0

नहीं, मैं नेटबीन का उपयोग नहीं कर रहा हूं लेकिन कंसोल से सीधे काम कर रहा हूं। मेरी जावैक लाइन है: 'जावा-क्लास्पाथ "सी: \ प्रोग्राम फ़ाइलें \ ओरेकल \ जावाएफएक्स 2.1 एसडीके \ आरटी \ lib \ jfxrt.jar"; .. \ bin -d .. \ bin .. \ src \ progtext.java' –

उत्तर

9

यह प्रश्न कुछ हद तक compile javafx 2.0 manually डुप्लिकेट करता है।

यह उत्तर विशेष रूप से ओरेकल जावा 8 के रिलीज से पहले जावाएफएक्स 2 संस्करणों के लिए है। ओरेकल जावाएफएक्स 8+ के लिए, जावाएफएक्स रनटाइम क्लासपाथ पर है, इसलिए आपको संकलन या जावाएफएक्स चलाने पर स्पष्ट रूप से इसे जोड़ने की आवश्यकता नहीं है अनुप्रयोगों।

जावा में jdk7u6 और ऊपर (विंडोज़ और लिनक्स के लिए) और jdk7u4 और ऊपर (ओएसएक्स के लिए) में जावाएफएक्स शामिल है।

डाउनलोड करें और jdk7u6 + का उपयोग करें और आपको किसी भी क्लासपाथ में jfxrt.jar फ़ाइल निर्दिष्ट करने की आवश्यकता नहीं होगी और आपके सभी जावाएफएक्स से संबंधित क्लासपाथ मुद्दों को दूर जाना चाहिए।

यहां early binary build of jdk7u6 का एक लिंक है।

विंडोज़ पर जावाएफएक्स 2.1 के लिए आपको संकलन के लिए अपने क्लासपाथ में jfxrt.jar lib शामिल करने की आवश्यकता है (यदि आप जावाफैक्स प्लेटफॉर्म सेटिंग्स का उपयोग करते हैं तो NetBeans स्वचालित रूप से ऐसा करेंगे) और (यदि आपने अपने ऐप को सही ढंग से पैक नहीं किया है javafxpackager या JavaFX चींटी कार्य), रनटाइम पर भी।

लिनक्स के लिए जावाएफएक्स 2.1 प्री-रिलीज है (यदि आप इसका उपयोग कर रहे हैं)। लिनक्स प्री-रिलीज के लिए आपको केवल अपने क्लासपाथ में jfxrt.jar को संकलित और रनटाइम पर शामिल करना होगा यदि Linux पर JavaFX रनटाइम सही तरीके से सेट नहीं किया गया था।

यहां एक कमांड लाइन संकलन और विंडोज़ के तहत जावाएफएक्स प्रोग्राम निष्पादन का एक उदाहरण है।

लॉन्च एक संपादक:

C:\dev\test>notepad HelloWorld.java 

निम्नलिखित कोड पेस्ट करें और इसे बचाने के लिए:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.stage.Stage; 

public class HelloWorld extends Application { 
    public static void main(String[] args) { 
    launch(args); 
    } 
    @Override 
    public void start(Stage stage) { 
    stage.setScene(new Scene(new Label("Hello World"))); 
    stage.show(); 
    } 
} 

संकलित करें और चलाने यह JavaFX 2।2:

C:\dev\test>javac -cp "\Program Files\Oracle\JavaFX 2.2 Runtime\lib\jfxrt.jar" HelloWorld.java 
C:\dev\test>java -cp ".;\Program Files\Oracle\JavaFX 2.2 Runtime\lib\jfxrt.jar" HelloWorld 

ओरेकल जावा 8 के लिए, स्पष्ट JavaFX classpath विनिर्देशक की आवश्यकता नहीं है:

C:\dev\test>javac HelloWorld.java 
C:\dev\test>java HelloWorld 

ध्यान दें कि आमतौर पर नहीं बल्कि सिर्फ कोड संकलन और यह चलाने की तुलना में, आप भी पैकेज होगा javafxpackager या javafx चींटी कार्यों के साथ कोड। ये कार्य आपके पैक किए गए ऐप में लॉन्चर क्लास को एम्बेड करेंगे जो जावाएफएक्स रनटाइम के संस्करण और स्थान का पता लगाएगा ताकि आपको jfxrt.jar स्थान निर्दिष्ट करने की आवश्यकता न हो, जब तक कि आप प्लेटफ़ॉर्म के लिए डिफ़ॉल्ट स्थान को ओवरराइड नहीं करना चाहते।

+0

आपको बहुत गहने धन्यवाद। यह बहुत उपयोगी है। Jdk7u6 स्थापित करने का प्रयास करने से पहले, मैं देखना चाहता हूं कि मेरे कोड को jdk7u4 के साथ चलाने के लिए क्या आवश्यक है, जो मेरे पास पहले से है। मैं अपने कार्यक्रम को चलाने के लिए कैसे प्राप्त करूं क्योंकि चीजें अब हैं? आपके पास कोई विचार है? –

+0

छोटे सुधार: लिनक्स के लिए जावाएफएक्स 2.1 प्री-रिलीज के लिए भी, यदि सेटअप सही ढंग से क्लासपाथ पर jfxrt.jar की आवश्यकता नहीं है। – Puce

+0

धन्यवाद प्यूस, मैंने आपके सुधार को शामिल करने के लिए उत्तर अपडेट किया। – jewelsea

-4

जावा 7 अद्यतन 21 के लिए, Windows XP SP3, मैं

javac -cp "\Program Files\Java\jre7\lib\jfxrt.jar" HelloWorld.java 

और

java -cp ".;\Program Files\Java\jre7\lib\jfxrt.jar" HelloWorld 
+0

-1 आप क्या जवाब दे रहे हैं? आप क्यू में समस्या का कोई संदर्भ नहीं देते हैं। – fredrik

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