Задать вопрос
@XOM91K

Как передать переменные Class1 в Class2, если в Class1 они связаны с FXML?

в .fxml файле есть объект Text со своим fx:id
<Text fx:id="system_messages" layoutX="202.0" layoutY="638.0" strokeType="OUTSIDE" strokeWidth="0.0" text="сообщений пока нет..." wrappingWidth="889.69921875">

в главном контроллере я объявил этот объект с таким же именем, как и fx:id.
public class MainController implements Initializable {
    @FXML
    Text system_messages;
...

Теперь мне требуется изменить текст объекта system_messages, например на "Возникла ошибка", но не в MainController а в другом классе, например в классе SystemMessagesController в специально отведенном контроллере, который будет изменять тексты текстбоксов... Я это пытаюсь сделать вот так:
public class SystemMessagesController {
    MainController main = new MainController();
    
    public void system_messages(String type) {
        switch (type) {
            case "UnknownHostException": {
                FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main.fxml"));
                main = (MainController) fxmlLoader.getController ();
                main.system_messages.setText("Ошибка получения данных. Проверьте подключение к интернету.");
            }
            default: {
                main.system_messages.setText("Ошибка получения данных. Ошибка неизвестна.");
            }
        }
    }
}

Но возникает ошибка
Caused by: java.lang.NullPointerException: Cannot read field "system_messages" because "this.main" is null

Я понимаю это как-то связано с @FXML перед объявлением объекта Text system_messages; но мне не хватает знаний понять, как это можно исправить... Все же хочется не мусорить в главном контроллере, а сделать это во втором... Помогите пожалуйста.
  • Вопрос задан
  • 52 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Chesterfield25
Вы получаете ошибку в классе SystemMessagesController со значением null по той причине что ваш system_messages находится в другом классе а именно в MainController.
Вам нужно передать system_messages из класса MainController в класс SystemMessagesController! А в самом классе получить system_messages и подставить в замен на текст сообщения. А так же в вашем main.fxml должен быть

<Text fx:id="get_system_messages" layoutX="202.0" layoutY="638.0" strokeType="OUTSIDE" strokeWidth="0.0" text="сообщений пока нет..." wrappingWidth="889.69921875">


Должно получится что то подобное
main.get_system_messages.setText("сюда передаём system_messages");
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы