2012-12-19 14 views
9

भाषा: JavaFXJavaFX में स्टाइलशीट करने के लिए सीएसएस फ़ाइल जोड़ने

आईडीई: Netbeans

समस्या: मैं शैलीपत्र का सीएसएस फ़ाइल जोड़ने के लिए कोशिश कर रहा हूँ, लेकिन निम्नलिखित कोड की पहली पंक्ति हमेशा एक उत्पन्न करता है NullPointerException:

String css = this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css); 

मैं पूर्ण पथ के साथ "double_slider.css" की जगह की कोशिश की है। double_slider.css वर्तमान में उसी पैकेज में स्थित है जो इस कॉल को बनाता है। मैंने बिना किसी सफलता के http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/ पर पाए गए सभी बदलावों का भी प्रयास किया है। स्वच्छ और निर्माण या तो मदद नहीं करता है।

यदि मैं निर्माण फ़ोल्डर में सीएसएस फ़ाइल डालता हूं जहां .class फ़ाइलों को डंप किया जाता है, तो NullPointerException दूर चला जाता है। लेकिन फिर सीएसएस फ़ाइल ठीक से काम नहीं करती है क्योंकि यह मेरी परियोजना में अन्य फाइलों का संदर्भ देती है।

+0

आपका ऐप कैसे बनाया गया, तैनात और निष्पादित किया गया है? – jewelsea

उत्तर

0

हमम, क्या आप नेटबीन्स पर हैं? प्रोजेक्ट को "क्लीन और बिल्ड" करने का प्रयास करें।

+0

हां, मैं नेटबीन्स का उपयोग कर रहा हूं। मैंने कई बार "साफ और निर्माण" करने की कोशिश की है, लेकिन यह समस्या का समाधान नहीं करता है। – Danielle

+0

@Danielle। निम्न में से कौन सी रेखाएं NullPointerException उत्पन्न करती हैं: 1) 'स्ट्रिंग css = this.getClass()। GetResource ("double_slider.css")। ToExternalForm(); '2)' scene.getStylesheets()। (Css) जोड़ें; '। यदि अभी भी 2 में है तो आपको अधिक जानकारी प्रदान करने की आवश्यकता है। वैकल्पिक रूप से नेटबीन्स में एक नई छोटी परियोजना बनाएं और वहां अपनी सीएसएस फ़ाइल लोड करने का पुनः प्रयास करें। –

+1

NullPointerException पहली पंक्ति द्वारा उत्पन्न होता है। – Danielle

0

क्या आपने स्टाइल शीट सेट करने से पहले दृश्य ऑब्जेक्ट शुरू किया है?

दृश्य = नई दृश्य (myRootLayout, 600, 600); // उदाहरण के लिए

+0

हां, दृश्य शुरू किया गया है। – Danielle

+0

मुझे सीएसएस के साथ काम करते समय भी एक ही समस्या थी, मुझे याद रखना मुश्किल था कि क्या गलत था। दृश्य शुरू करना नल पॉइंटर अपवाद फेंकने का एक तरीका था। – medokr

+0

क्या आपने पेस्ट किया सीधे आपके स्रोत कोड से ऊपर कोड? double_slider.css के चारों ओर उद्धरण अजीब दिखते हैं। क्या आप उन उद्धरण चिह्नों को पुनः टाइप करने का प्रयास कर सकते हैं। एक अजीब सुझाव हो सकता है। कोड मेरे लिए सही प्रतीत होता है। – medokr

9

मुझे लगता है कि आप स्लेश को याद कर रहे हैं जिसके कारण सीएसएस फ़ाइल नहीं मिल सकती है। अपने पथ संदर्भ को सही करने का प्रयास करें।

उदाहरण के लिए:

-root 
--app/Main.java 
--assets/double_slider.css 

होगा:

String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm(); 
+1

हमें क्यों आवश्यकता है EXFternalForm(); अंतिम में विधि? – UnKnown

+0

@UnKnown 'node.getStylesheets()। जोड़ें()' पैरामीटर के रूप में 'URL' ऑब्जेक्ट को स्वीकार न करें। 'toExter nalForm() 'स्ट्रिंग के रूप में इसका प्रतिनिधित्व करते हैं। JavaDoc से – KeepMove

+0

: [पथ] के किसी भी अग्रणी '/' चरित्र को अनदेखा किया जाता है और [पथ] को एप्लिकेशन के क्लासपाथ की जड़ से संबंधित पथ के रूप में माना जाता है। " – Line

5

मैं एक ही समस्या थी। मैं Win7 पर NetBeans 7.3 और JavaFX 2.2.7, JDK 7.0_21 का उपयोग करता हूं।

मेरे समाधान मेरी जावा शून्य शुरू (चरण चरण) युक्त फ़ाइल के रूप में वही फ़ोल्डर में .css जगह थी। तो परियोजना दृश्य इस तरह दिखता है:

  • ProjectName
    • स्रोत संकुल
      • pkgWhatever
        • Main.java
        • MyCssFile.css

(तो सीएसएस फ़ाइल पैकेज में है, जो मैं वास्तव में अजीब और contraintuitive लगता है। कुछ डॉक्टर ने मुझे परियोजना की जड़ में डालने के लिए कहा ताकि यह रनटाइम पर पाया जा सके, लेकिन यह मेरे लिए एनबी में काम नहीं करता था। मेरा ऐप अब इस बात पर ध्यान दिए बिना कि "प्रारंभ (..)" Ctrl + यू या प्रोजेक्ट के संदर्भ मेनू पर चलाएं क्लिक करके फ़ाइल शुरू करें।और यह कोई प्रभाव नहीं पड़ेगा कि क्या मैं एनबी एक जार में है या नहीं सब कुछ डाल दिया है)

यहाँ कोड है कि ऊपर स्थिति में सीएसएस लोड करता है:।

URL url = this.getClass().getResource("controlStyle1.css"); 
    if (url == null) { 
     System.out.println("Resource not found. Aborting."); 
     System.exit(-1); 
    } 
    String css = url.toExternalForm(); 
    scene.getStylesheets().add(css); 

इस जबकि काम नहीं किया:

scene.getStylesheets().add("controlStyle1.css"); 

उम्मीद है कि इससे मदद मिलती है।

+0

आपका समाधान मेरे लिए काम किया, धन्यवाद। – FirstLegion

9

yourname.css फ़ाइल सीधे src निर्देशिका के तहत डालें।

scene.getStylesheets().add("yourname.css") 

स्वच्छ और निर्माण के लिए आवश्यक

+0

मुझे लगता है कि अगर आप इसे उपदीर में डालते हैं तो यह अधिक सुंदर और स्पष्ट है। सीधे '/ src' के अंतर्गत नहीं –

0

यह काफी आसान है।

this.scene.setUserAgentStylesheet(/resources/blabla.css); 

यह वही मुझ

3

के लिए काम किया मैं एक ही समस्या थी (NetBeans 8 में) है। मैं यहाँ एक समाधान पाया: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

मेरे संसाधन फ़ाइल spreadsheet.css यहाँ था:

MyApp 
-resources 
--spreadsheet.css 
-source packages 
--fr.ccc.myapp.view 
---mainView.java 
---FXMLMain.fxml 

mainView.java में:

File f = new File("resources/spreadsheet.css"); 
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); 

आशा इस मदद करता है।

0

अपने पुराने कोड को ध्यान में रखते:

String css =this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css); 

इस नए कोड के लिए इसे बदलने का प्रयास करें और यह काम करेगा:

screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm()); 

जब आप getClass() उपयोग करते हैं, आप this कीवर्ड का उपयोग करने की जरूरत नहीं है।

मुझे आशा है कि यह आपके लिए काम करेगा। :)

0
आपकी फ़ाइल में

जावा उपयोग इस

Application.setUserAgentStylesheet(getClass().getResource("application.css") 
       .toExternalForm()); 
2

आप अपने style.css सीधे अपने .fxml फ़ाइल में एक विशेषता के रूप में अपने मूल तत्व को यह शैली के रूप में जोड़ सकते हैं = "@ your_relative_path/style.css "।

आप सीएसएस फ़ाइल अपने स्रोत फ़ोल्डर

0

Folder Structure

में है कि MedicalLibraryFx.java

scene.getStylesheets().add(getClass().getResource("/css/style.css").toString()); 

में उपयोग करने के लिए चाहते हैं तो आप उपयोग कर सकते हैं @ ../style.css

Folder structure when css is in the same directory as controller

scene.getStylesheets().add(getClass().getResource("style.css").toString()); 
संबंधित मुद्दे