2016-04-02 4 views
-1

Jetzt habe ich einige Probleme, wenn ich Parameter versuchen unter Bildschirme vorbeiFehler bei Übergabe von Parametern zwischen Bildschirmen Java FXML

Das ist mein LogIn-Controller:

@FXML 
public void handleButtonAction(ActionEvent event) throws IOException{ 
    String text = textFieldLogIn.getText(); 
    Stage stage = new Stage(); 

    if(text.length() != 0){ 

     FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Menu.fxml")); 
     MenuController controller = fxmlLoader.<MenuController>getController(); 
     Parent root = (Parent)fxmlLoader.load(); 

     stage = (Stage) btnLogIn.getScene().getWindow(); 

     detail.setName("Tu"); 
      controller.setDetail(detail); 

     Scene scene = new Scene(root); 
     stage.setScene(scene); 


     stage.show(); 
    } 
    else{ 
     notiLogIn.setText("Please enter your name"); 
     notiLogIn.setTextFill(Color.RED); 
    } 

Das ist meine Klasse Kundendetails ist:

public class CustomerDetails { 
String name; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getAttendance() { 
    return attendance; 
} 

public void setAttendance(int attendance) { 
    this.attendance = attendance; 
} 

public double getTotalBill() { 
    return totalBill; 
} 

public void setTotalBill(double totalBill) { 
    this.totalBill = totalBill; 
} 
int attendance; 
double totalBill; 

Das ist mein MenuController:

public class MenuController implements Initializable { 
    CustomerDetails detail = new CustomerDetails(); 

public CustomerDetails getDetail() { 
    return detail; 
} 

public void setDetail(CustomerDetails detail) { 
    this.detail = detail; 
} 
@FXML 
private AnchorPane menuPane; 
@FXML 
private SplitPane menuSplitPane; 
@FXML 
private AnchorPane menuPane1; 
@FXML 
private VBox menuVBox; 
@FXML 
private Button btnFood; 
@FXML 
private Button btnDrink; 
@FXML 
private Button btnOther; 
@FXML 
private Button btnBill; 
@FXML 
private Label menuWelcome; 
@FXML 
private AnchorPane displayMenu; 

So jetzt habe ich Problem, dass, wenn ich die getController() mit der controller.setDetail (Detail) habe ich einen Fehler über java.lang.NullPointerException und ich kann den Wert nicht an Bildschirm 2: Menü übergeben. Also, was soll ich dieses Problem beheben?

Antwort

0

Die Frage betrifft nicht die Parameterübergabe. Sie haben eine NullPointerException, weil controller null ist, nicht, weil details null ist.

Hier erhalten Sie den Controller mit getController bevor Sie load anrufen.

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Menu.fxml")); 
MenuController controller = fxmlLoader.<MenuController>getController(); 
Parent root = (Parent)fxmlLoader.load(); 

Die load Methode lädt die Objekthierarchie von einem FXML Dokument und auch diese Methode erstellt ein Controller-Objekt für Sie, die von getController() abgerufen werden kann.

Lösung: den Controller erhalten, nachdem Sie die FXML Datei geladen haben:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Menu.fxml")); 
Parent root = (Parent)fxmlLoader.load(); 
MenuController controller = fxmlLoader.<MenuController>getController(); 
Verwandte Themen