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




8 Answers

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

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

मुझे नहीं पता कि यह क्यों काम करता है, लेकिन ऐसा हुआ!

java nullpointerexception javafx stage

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

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();
}

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

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

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

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




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

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/createCategory.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 = null; Scene myScene = null; Stage prevStage = null;

public void start(Stage primaryStage) throws Exception {
  primaryStage.setTitle("Shop Management");
  myLoader = new FXMLLoader(getClass().getResource("cartHomePage.fxml"));
  Pane myPane = (Pane) myLoader.load();
  CartHomePageUI controller = (CartHomePageUI) myLoader.getController();
  controller.setPrevStage(primaryStage);
  myScene = new Scene(myPane);
  primaryStage.setScene(myScene);
  primaryStage.show();
}

उसके बाद

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

public void gotoCreateCategory(ActionEvent event) throws IOException {
    Stage stage = new Stage();
    stage.setTitle("Shop Management");
    myLoader = new FXMLLoader(getClass().getResource("createCategory.fxml"));
    Pane myPane = (Pane) myLoader.load();            
    Scene scene = new Scene(myPane);
    stage.setScene(scene);
// prevStage.close(); I don't think you need this, closing it will set preStage to null   put a breakpoint after this to confirm it
    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");
    myLoader = new FXMLLoader(getClass().getResource("creatProduct.fxml"));
    Pane myPane = (Pane) myLoader.load();            
    Scene scene = new Scene(myPane);
    stage.setScene(scene);
// prevStage.close(); I don't think you need this, closing it will set preStage to null put a breakpoint after this to confirm it
    setPrevStage(stage);
    stage.show();      
}

इसे आज़माएं और मुझे बताएं।




मुझे भी यही समस्या थी।

कुछ मिनटों के बाद, मुझे लगा कि मैं गलत स्थान से file.fxml लोड करने की कोशिश कर रहा था।

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/[wrong-path]/abc.fxml"));
fxmlLoader.setClassLoader(getClass().getClassLoader());
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
fxmlLoader.load();



इंटेलिज उपयोगकर्ताओं के लिए, मेरी समस्या यह थी कि निर्देशिका जहां मेरी एफएक्सएमएल फाइलें थीं (src / main / resource), को "संसाधन" निर्देशिका के रूप में चिह्नित नहीं किया गया था।

मॉड्यूल / प्रोजेक्ट सेटिंग्स खोलें स्रोत टैब पर जाएं और सुनिश्चित करें कि Intellij जानता है कि निर्देशिका में प्रोजेक्ट संसाधन फ़ाइलें हैं।




मुझे भी यही समस्या थी। सही पथ निर्दिष्ट नहीं करने की यह एक साधारण समस्या है।

अपनी .fxml फ़ाइल पर राइट क्लिक करें और गुणों का चयन करें (ग्रहण का उपयोग करने वालों के लिए एक और आईडीई के लिए इतना अलग नहीं होगा) और फिर अंत तक /packagename से शुरू होने वाली जगह कॉपी करें और समस्या को हल करना चाहिए




Related