2015-12-06 90 views
0

我想在不同的FXML場景的控制器之間傳遞數據。但我無法將數據傳遞給另一個控制器。 這是我的第一個控制器。不能在JavaFX控制器之間傳遞數據

public class FXMLDocumentController { 

Session session; 

private static Stage myStage; 

@FXML 
private Button button; 

@FXML 
private TextField txtAd; 

@FXML 
private TextField txtSifre; 

@FXML 
void handleButtonAction(ActionEvent event) { 

    session = NewHibernateUtil.getSessionFactory().openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 

     Query query = session.createQuery("from Userss where ad = :code and sifre = :sifre"); 
     query.setParameter("code", txtAd.getText().trim()); 
     query.setParameter("sifre", txtSifre.getText().trim()); 
     if (query.list().size() == 1) { 

      Alert alert = new Alert(AlertType.INFORMATION); 
      alert.setTitle("Giriş"); 
      alert.setHeaderText(null); 
      String s = "This is an example of JavaFX 8 Dialogs... "; 
      alert.setContentText(s); 
      alert.showAndWait(); 

     } 


     tx.commit(); 
    } catch (Exception e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
    } finally { 

     try { 
      session.close(); 

      FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDevam.fxml")); 
      DevamController devamController = loader.getController(); 
      devamController.as("aaaaaaaaaaaaaaaaaaaaa"); 
      AnchorPane login = (AnchorPane) loader.load(); 
      Scene scene = new Scene(login); 

      myStage.setTitle("asd"); 
      myStage.setScene(scene); 

     } catch (IOException ex) { 
      Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 

static void setStage(Stage stage) { 
    myStage = stage; 
} 

}

這是第二控制器。

public class DevamController implements Initializable { 

String as ; 


@FXML 
private Label lblAd; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 

    lblAd.setText(as); 
}  

public void as (String a){ 
    as = a; 
} 

}

我在這行得到NullPointerException異常:

devamController.as("aaaaaaaaaaaaaaaaaaaaa"); 

我已經試過這一點,它不工作: JavaFX: passing data between Controllers is always null

回答

2

控制器從FXML文件加載(因爲這是它的定義,與fx:controller),所以它將爲空,直到您加載FXML loader.load()。只需切換順序:

 FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDevam.fxml")); 
     AnchorPane login = (AnchorPane) loader.load(); 
     DevamController devamController = loader.getController(); 
     devamController.as("aaaaaaaaaaaaaaaaaaaaa"); 

您將需要更新的標籤在你as()方法,因爲initialize()將已經被執行。

+0

我已經看到你在評論的其他鏈接中回答。但我不明白。我試圖做幾個小時。它現在有效。非常感謝。 –

相關問題