JavaFX स्थान त्रुटि संदेश सेट नहीं है


Answers

मुझे यह अपवाद मिल रहा था और "समाधान" मुझे पाया गया था केवल नेटबीन्स आईडीई के माध्यम से, बस:

  1. राइट-क्लिक करें -> "क्लीन एंड बिल्ड"
  2. प्रोजेक्ट फिर से चलाएं

मुझे नहीं पता कि यह काम क्यों किया, लेकिन यह किया!

Question

जब वर्तमान दृश्य को बंद करने और मेनू इटैम का चयन किया जाता है तो दूसरे दृश्य को खोलने में मुझे समस्या है मेरा मुख्य चरण नीचे कोडित है:

public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Shop Management");
    FXMLLoader myLoader = new FXMLLoader(getClass().getResource("cartHomePage.fxml"));

    Pane myPane = (Pane) myLoader.load();

    CartHomePageUI controller = (CartHomePageUI) myLoader.getController();

    controller.setPrevStage(primaryStage);
    Scene myScene = new Scene(myPane);
    primaryStage.setScene(myScene);
    primaryStage.show();
}

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

Stage prevStage;

public void setPrevStage(Stage stage){
     this.prevStage = stage;
}

 public void gotoCreateCategory(ActionEvent event) throws IOException {
  Stage stage = new Stage();
    stage.setTitle("Shop Management");
    FXMLLoader myLoader = new FXMLLoader(getClass().getResource("createCategory.fxml"));
    Pane myPane = (Pane) myLoader.load();            
    Scene scene = new Scene(myPane);
    stage.setScene(scene);
    prevStage.close();
    setPrevStage(stage);
    stage.show();       
}

//Method to change scene when menu item create product is on click
@FXML
public void gotoCreateProduct(ActionEvent event) throws IOException {
   Stage stage = new Stage();
    stage.setTitle("Shop Management");
    FXMLLoader myLoader = new FXMLLoader(getClass().getResource("creatProduct.fxml"));
    Pane myPane = (Pane) myLoader.load();            
    Scene scene = new Scene(myPane);
    stage.setScene(scene);
    prevStage.close();
    setPrevStage(stage);
    stage.show();      
}

हालांकि, मैं केवल एक बार स्टेज पर स्विच कर सकता हूँ उदाहरण के लिए, मेरा डिफ़ॉल्ट पृष्ठ cartHomePage.fxml है जब मैं प्रोग्राम चलाता हूं, तो पहले मैं उत्पाद स्टेज बनाने जा रहा हूं। इसके बाद, मैं कहीं और भी नहीं जा सकता। त्रुटि संदेश है:

java.lang.IllegalStateException: Location is not set.
and Null Pointer Exception

मैंने इसे बंद करने के बाद मंच सेट किया था और इसे चारों ओर पास किया था मुझे आश्चर्य है कि कौन सा हिस्सा गलत हो गया

अग्रिम में धन्यवाद।




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




मैंने एक ही समस्या पर ठोकर खाई है प्रोग्राम "रन" बटन के माध्यम से एक्लिप्स से बहुत अच्छा चल रहा था, लेकिन रननबल जेएआर से नहीं जो मैंने पहले निर्यात किया था मेरा समाधान था:

1) मुख्य श्रेणी को डिफ़ॉल्ट पैकेज में ले जाएं

2) एक्लिप्स के लिए दूसरे मार्ग सेट करें, और दूसरी बार जार फ़ाइल से चलें ( मेन। जावा में पेस्ट करें)

public static final String sourcePath = isProgramRunnedFromJar() ? "src/" : "";
public static boolean isProgramRunnedFromJar() {
    File x = getCurrentJarFileLocation();
    if(x.getAbsolutePath().contains("target"+File.separator+"classes")){
        return false;
    } else {
        return true;
    }
}
public static File getCurrentJarFileLocation() {
        try {
            return new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        } catch(URISyntaxException e){
            e.printStackTrace();
            return null;
        }
}

और उसके शुरू होने के बाद आपको इस तरह से फाइलें लोड करना होगा:

FXMLLoader loader = new FXMLLoader(getClass().getResource(sourcePath +"MainScene.fxml"));

यह एक्लेप्से मार्स के साथ ई (एफएक्स) क्लिपवे प्लगइन के लिए मेरे लिए काम करता है।




यह मेरे साथ हुआ मुझे एक समाधान मिला यदि आप अपनी प्रोजेक्ट को अपनी प्रोजेक्ट को उस श्रेणी से अलग पैकेज में बनाते हैं जिसमें प्रक्षेपण लाइन ( Parent root = FXMLLoader.load(getClass().getResource("filenamehere.fxml")); ) और एक रिश्तेदार पथ का उपयोग करें पहली बार को छोड़कर खिड़कियां लॉन्च नहीं करती हैं जब आपके रन की जार। इसे छोटे स्थान को .fxml फ़ाइल को उस पैकेज के साथ रखने के लिए जो इसे लॉन्च करता है और इस तरह के पथ को सेट करता है ("filenamehere.fxml") और यह ठीक काम करना चाहिए।




मेरे जावा एफएक्स आवेदन में मेरे पास एक ही मुद्दा था। और भी अजीब: मेरे विंडोज डेवलपमेंट पर्यावरण में सब कुछ Fxml लोडर के साथ ठीक काम किया। लेकिन जब मैंने अपने डेबियन मस्कीन पर सटीक कोड निष्पादित किया था, तो मुझे "स्थान सेट नहीं" के साथ इसी तरह की त्रुटियां मिलीं।

मैंने यहां सभी उत्तर पढ़ा, लेकिन कोई भी वास्तव में समस्या को "हल" करने के लिए नहीं लग रहा था मेरा समाधान आसान था और मुझे आशा है कि इससे आप में से कुछ मदद मिलती है:

हो सकता है जावा getclass () विधि से भ्रमित हो जाता है। यदि कोई अलग थ्रेड्स में चलाता है या आपकी कक्षा किसी भी इंटरफेस को लागू करती है, तो यह बिंदु पर आ सकता है, कि आपके क्लास की तुलना में एक अन्य क्लास getclass () विधि द्वारा लौटा दी गई है इस मामले में, creatProduct.fxml के लिए आपका रिश्तेदार पथ गलत होगा, क्योंकि आपके "हैं" पथ में नहीं हैं, जो आपको लगता है कि आप हैं ...

तो बचाने के पक्ष में रहने के लिए: अधिक विशिष्ट रहें और अपने क्लास पर स्थैतिक कक्षा के क्षेत्र का उपयोग करने की कोशिश करें ( नोट: YourClassHere.class )।

@FXML
public void gotoCreateProduct(ActionEvent event) throws IOException {
   Stage stage = new Stage();
    stage.setTitle("Shop Management");
    FXMLLoader myLoader = new FXMLLoader(YourClassHere.class.getResource("creatProduct.fxml"));
    Pane myPane = (Pane) myLoader.load();            
    Scene scene = new Scene(myPane);
    stage.setScene(scene);
    prevStage.close();
    setPrevStage(stage);
    stage.show();      
}

इसे साकार करने के बाद, मैं हमेशा इसे पसंद करता हूं। उम्मीद है की वो मदद करदे!




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

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/createCategory.fxml"));
//                                                           ^



मेरा अजीब था ... IntelliJ विशिष्ट quirk

मैंने अपने आउटपुट क्लासेस को देखा और एक फ़ोल्डर था:

xyz

के बजाय

x / y / z

लेकिन अगर आपके पास नेविगेटर में इंटेलईजे में कुछ विकल्प सेट किए गए हैं, तो वे दोनों एक्सएज़ की तरह दिखेंगे

तो अपने आउटपुट फ़ोल्डर की जांच करें यदि आप अपने सिर को खरोंच कर रहे हैं




मुझे लगता है कि समस्या या तो गलत लेआउट नाम या अमान्य लेआउट फ़ाइल पथ है।

IntelliJ के लिए, आप वहां संसाधन निर्देशिका और स्थान लेआउट फाइल बना सकते हैं।

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/sample.fxml"));
rootLayout = loader.load();