2016-04-02 23 views
-1

Şimdi ben ekranlarHatalar Java FXML

arasında parametre geçirerek çalıştıklarında ı bazı sorunlar var Bu benim Giriş kontrolörü geçerli:

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; 
: Bu benim sınıf CustomerDetails olduğunu

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

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; 
:

Bu benim MenuController olduğunu

Bu yüzden, şimdi controller.setDetail (detail) ile getController() kullandığımda java.lang.NullPointerException ile ilgili bir hata aldığımda ve ekran 2: Menüsüne değeri geçemediğimde sorun yaşıyorum. Peki bu sorunu ne çözmeliyim?

cevap

0

Soru, parametre geçişi ile ilgili değil. var, controller null değil, çünkü details boştur.

load'u aramadan önce denetleyiciyi getController ile alabilirsiniz.

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

load yöntemi bir FXML belgeden nesne hiyerarşisini yükler ve ayrıca bu yöntemin getController() tarafından alınabilir sizin için bir kontrolör nesnesi oluşturur.

Çözüm: Eğer FXML dosyasını yükledikten sonra denetleyici olsun:

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