2016-04-15 15 views
0

Ich möchte den Text eines FXML-Elements von außerhalb der Controller-Klasse ändern, indem ich eine Referenz in der Hauptfunktion verwende, aber ich bekomme eine NullPointerException.FXML-Element von außerhalb des Controllers mit Referenz ändern - NullPointerException

Klasse Controller:

public class Controller implements Initializable { 

    @FXML 
    public ComboBox<String> comboBoxSelectPort; 

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

     Language l = new Language(); 
     l.setLanguage(); 

     comboBox.setPromptText("New Text"); // This works! 
    } 
} 

Klasse Sprache:

public class Language { 

    private Controller c = Main.controller; 

    public void setLanguage(){ 

     c.comboBox.setPromptText("New Text"); // This is NOT working! 
    } 
} 

UPDATE 1:

Klasse Main:

public class Main extends Application { 

    public static Stage stage; 
    public static Controller controller; 
    @Override 
    public void start(Stage stage) throws Exception { 

     FXMLLoader loader = new FXMLLoader(getClass().getResource("Scene.fxml")); 
     Parent root = (Parent) loader.load(); 
     controller = (Controller) loader.getController(); 
     System.out.println(controller);   // Works! 
     .... 

Aber in-Controller oder Sprachklasse

System.out.println(Main.controller);  // Output: Null 

UPDATE 2:

Das Problem scheint zu sein, dass sich der Controller im Haupt erstellt wird vor dem die Referenz erstellt wird.

Antwort

0

Übergeben der Steuerung Bezugnahme auf die Language Beispiel:

public class Language { 

    private final Controller c ; 

    public Language(Controller controller) { 
     this.c = controller ; 
    } 

    public void setLanguage(){ 

     c.comboBox.setPromptText("New Text"); // This is NOT working! 
    } 
} 

und dann

public class Controller implements Initializable { 

    @FXML 
    public ComboBox<String> comboBoxSelectPort; 

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

     Language l = new Language(this); 
     l.setLanguage(); 

     comboBox.setPromptText("New Text"); // This works! 
    } 
} 
Verwandte Themen