使用参考从控制器外部更改 FXML 元素 - NullPointerException

Changing FXML element from outside the Controller with reference - NullPointerException

我想通过使用我在主函数中创建的引用从控制器外部更改 FXML 元素的文本 class,但我收到 NullPointerException。

Class 控制器:

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!
    }
}

Class 语言:

public class Language {

    private Controller c = Main.controller;

    public void setLanguage(){

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

更新 1:

Class 主要:

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!
        ....

但在控制器或语言中 class

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

更新 2:

问题似乎是在创建引用之前在 Main 中创建了控制器。

将控制器引用传递给 Language 实例:

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!
    }
}

然后

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!
    }
}