mani
mani

Reputation: 217

Popup window Label is not getting loaded

1.Trying to display exception message in popup window. Exception message is not appearing.

2.Eg: When i click button a popup window (Second fxml file) is to load with proper exception message in the label

3.Popup window is appearing, But the Label is not loading (Bold one --> ExceptionLabel.setText("Please enter Proper file path")) it says null pointer exception.

4.I am not sure what i missing. Same declared in FX:ID and also in second fxml file linked the main controller. Thanks in advance.

 @FXML
 public Label ExceptionLabel;
 Stage PopupWindow = new Stage();

 public void Buttonhandle(ActionEvent event) throws IOException {
    try {

        if(ESBOutboundFile!=null && OutputFile!=null){
         String Output = SBlogpaser.Logpaser(ESBInboundFile,ESBOutboundFile,OutputFile);
        System.out.println(Output);
        }else{
        Window(PopupWindow);
        **ExceptionLabel.setText("Please enter Proper file path");**

        }
    } catch (Exception ex) {
        System.out.println(ex);
    }

}

public void Window(Stage Popup) throws Exception {
   this.Popup=Popup;
   final FXMLLoader fxmlLoader = new FXMLLoader();
    Parent root= fxmlLoader.load(getClass().getResource("POPUPWindow.fxml"));            
    Scene scene1 = new Scene(root);
    Popup.setScene(scene1);
    Popup.show();      
}

Popup window without label

If i keep the label in "OK" handle button it is getting displayed.

Upvotes: 0

Views: 395

Answers (1)

James_D
James_D

Reputation: 209553

From where are you expecting ExceptionLabel to be instantiated?

Assuming you are pointing the fx:controller attribute of the root of your POPUPWindow.fxml file to the current class, it will just create a new instance of that class, and inject values into that instance. The field ExceptionLabel in the current instance won't be initialized.

You could probably just about make this work by setting the controller of the FXMLLoader to the current object, something like this:

public void window(Stage popup) throws Exception {
   this.popup=popup; // why?
   final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("POPUPWindow.fxml"));
    fxmlLoader.setController(this);
    Parent root= fxmlLoader.load();            
    Scene scene1 = new Scene(root);
    popup.setScene(scene1);
    popup.show();      
}

and then remove the fx:controller attribute from POPUPWindow.fxml.

This seems like a really bad idea, though, because now the current object is acting as a controller for two different FXML files. This will be confusing at best, and under fairly reasonable conditions would produce weird results. It would be much better to write a different controller class for the popup:

public class PopupController {
  private final String message ;
  @FXML
  private Label exceptionLabel ;

  public PopupController(String message) {
    this.message = message ;
  }

  public void initialize() {
    exceptionLabel.setText(message);
  }
}

and then use the window(...) method above, but with

fxmlLoader.setController(new PopupController("Please enter Proper file path"));

Obviously, if you're reusing the window(..) method, you might want to pass the message in as a parameter to that method.

Upvotes: 1

Related Questions