один параметр агента sendig для воздействия на других агентов в Anylogic

Похоже, вы пытаетесь ввести TextField в статическое поле. Что-то вроде

@FXML
private static TextField myTextField ;

Это, по-видимому, работало в JavaFX 2.2. Он не работает в JavaFX 8. Поскольку ни одна официальная документация никогда не поддерживала это использование, это на самом деле не нарушает обратную совместимость, хотя, с полным основанием, документация о том, что делает FXMLLoader, довольно горькая.

На самом деле не имеет смысла делать статические поля @FXML -injected. Когда вы загружаете файл FXML, он создает новые объекты для каждого из элементов в файле FXML. Новый экземпляр контроллера связан с каждым вызовом FXMLLoader.load(...), а поля в экземпляре этого контроллера вводятся соответствующими объектами, созданными для элементов FXML. Таким образом, введенные поля обязательно специфичны для экземпляра контроллера. Если у вас были статические введенные поля в контроллере, и вы дважды загрузили один и тот же файл FXML и дважды отображали его в пользовательском интерфейсе, тогда у вас не было бы способа ссылаться на оба набора элементов управления.

Обновление: ответ на вопрос в комментариях

В частности, не используйте статические поля, чтобы они могли быть доступны извне класса. Статическое поле имеет одно значение, принадлежащее классу, вместо значения для каждого экземпляра класса, и решение о создании полей static должно выполняться только в том случае, если это имеет смысл. Другими словами, static определяет область scope , а не доступность . Чтобы разрешить доступ к данным экземпляра, вам просто нужно иметь ссылку на экземпляр. FXMLLoader имеет метод getController(), который позволяет вам получить ссылку на контроллер.

Связанная точка: также не рекомендуется отображать элементы управления пользовательского интерфейса от контроллера. Вместо этого вы должны предоставить данные. Например, вместо определения метода getTextField() в контроллере вместо этого определите метод textProperty(), который возвращает StringProperty, представляющий содержимое TextField. Причина этого в том, что, когда ваш босс приходит в офис и говорит вам, что он хочет заменить TextField на TextArea или ComboBox или на какой-то другой элемент управления, тогда это будет намного сложнее если классы вне контроллера используют ваш TextField. Структура данных, представленных вашим контроллером, гораздо реже изменяется, чем реализация того, как эти данные представляются пользователю.

Для некоторых примеров

0
задан Raduan Santos 17 January 2019 в 10:18
поделиться

2 ответа

Ну, вам нужно получить доступ к параметру agent1 X1. Было бы полезно, если бы вы поделились некоторыми скриншотами и реальными именами объектов, но в вашей нотации вам понадобится что-то вроде этого, при условии, что у вас есть популяция агентов, встроенная в main, где живут все агенты (и предположим, что агенты 1 и 2 - это один и тот же агент тип), и при условии, что мы сделаем обновление агента 2, это X

X = X + main.myAgentPopulation.get(0).Y

Также предполагается, что «агент 1» - самый первый агент в вашем населении.

Лучше всего, если вы либо поделитесь некоторыми подробностями или лучше узнаете ООП на основе Java (вы не находитесь в мире наук о массивах, тензорах и матрицах :-)).

веселит

0
ответ дан Benjamin 17 January 2019 в 10:18
поделиться

Надеюсь, я понимаю ваш вопрос:

Во-первых, чтобы отправить сообщение от одного агента другому, вы можете использовать функцию отправки. Если ваше сообщение отправляется от агента1 к агенту2, чтобы отправить X, вы будете использовать: send (X, agent2)

Во-вторых, в соединениях с вашим агентом вы будете определять сообщения как int и в полученном вами сообщении. можно сделать Y=Y+msg; connections Обратите внимание, что msg - это X, полученный от агента 1.

РЕДАКТИРОВАТЬ: отправленное сообщение можно прочитать только в элементе соединений, как я уже говорил ... в вашем случае, когда вы используете переменную-посредник при переходе, вы используете переменную-посредник агента, а не ту, которая было отправлено. Единственный способ сделать это так, как я только что показал вам.

0
ответ дан Felipe 17 January 2019 в 10:18
поделиться
Другие вопросы по тегам:

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