Запуск модели AnyLogic из внешнего приложения

AnyLogic предлагает в распоряжение пользователей простой механизм встраивания моделей AnyLogic в сторонние Java приложения.

Среди обучающих моделей AnyLogic вы можете найти модели, демонстрирующие различные сценарии встраивания. Модели содержат код, который может использоваться в качестве отправной точки в том случае, если вам нужно будет использовать какой-либо из описанных механизмов в вашем приложении, усовершенствовав его под вашу конкретную задачу.

В этой статье описывается, как запускать модель AnyLogic из внешнего Java приложения (так, чтобы при этом создавалось и отображалось окно презентации модели). Этот случай интеграции реализован в следующей модели: 

Обучающая модель: Launching AnyLogic Model from External Application

Давайте посмотрим, что же именно нужно сделать для того, чтобы запустить модель AnyLogic из внешнего Java приложения, так, чтобы показывалось окно презентации этой модели. Пожалуйста, откройте обучающую модель, щелкнув по приведенной выше ссылке, и изучите ее внутреннюю структуру. 

Модель содержит:

Откройте код класса MyApplication, сделав двойной щелчок по этому классу в панели Проекты. Вы увидите следующий код:

Метод System.out.println() просто выводит информацию о ходе моделирования, нам же нужно обратить пристальное внимание всего на три строки кода.

Прежде всего - на строку: 

final Simulation s = new Simulation();

Здесь вызывается конструктор простого эксперимента Simulation. Пожалуйста, обратите внимание, что Simulation - это имя простого эксперимента в этой конкретной модели, а не имя базового класса для всех простых экспериментов в AnyLogic. Если бы эксперимент назывался MyExperiment, нужно было бы вызвать конструктор MyExperiment s = new MyExperiment();

Далее обратите внимание на строку:

s.setup(null);

Метод эксперимента setup() выполняет конфигурирование исполняющего модуля и презентации модели. Он создает окно презентации модели и затем сразу же возвращает управление основному исполняемому потоку приложения. Если модель предполагается отобразить во внешнем контейнере (панели, и т.п.), то в качестве аргумента надо передать этот контейнер, а если модель запускается в режиме автономного приложения (как это и происходит в нашем случае), то нужно передать значение null.

Ну и наконец, интерес представляет функция эксперимента runTheModel(). эта функция объявлена прямо в модели, на диаграмме простого эксперимента. Она делает то же, что и присутствующая обычно на диаграмме простого эксперимента кнопка "Run the model and switch to Main view" - запускает модель и показывает в окне презентации презентацию корневого типа агентов модели. Вызывая эту функцию, мы просто избавляем пользователя от необходимости нажимать эту кнопку при запуске модели - теперь запуск и переключение на презентацию корневого объекта происходит автоматически.

Обратите внимание, что ваше приложение может задавать значения для параметров модели - они доступны в коде как поля эксперимента, по их именам. В нашем примере строка s.Fraction=0.012345; задает значение 0.012345 переменной Fraction.  

 Чтобы проверить, как работает этот сценарий интегрирования

  1. Откройте указанный пример модели и экспортируйте его как отдельное приложение.
  2. Измените bat/sh/cmd файл, заменив имя класса с Simulation на MyApplication.
  3. Запустите bat/sh/cmd файл.

Если вы хотите использовать этот механизм в вашем приложении, усовершенствовав его под вашу конкретную задачу, следуйте описанным ниже шагам. Здесь мы опишем, как применить это решение в Java проекте, созданном в среде разработки Java приложений Eclipse. Если у вас нет Java проекта, создайте его, как описано здесь (ссылка на онлайн-документацию Eclipse на английском языке). 

 Чтобы использовать описанный механизм в вашем приложении

  1. Прежде всего, экспортируйте модель как отдельное приложение (мы рекомендуем экспортировать модель сразу в ту папку, где находится ваш Java проект).

  2. Добавьте .jar файлы, созданные при экспорте модели, в ваш Java проект. Для этого предварительно обновите информацию в дереве проекта, щелкнув правой кнопкой мыши по проекту  в дереве и выбрав пункт контекстного меню Refresh.

  1. Вы увидите новые файлы в дереве проекта.



    Выделите эти файлы и выберите команду Build path > Add to build path из контекстного меню. Вам будет нужно добавить скомпилированный .jar файл модели, а также .jar файлы библиотек, необходимые для успешного построения модели. Но не нужно добавлять bat/cmd/sh файл, используемый для запуска автономного приложения, и совершенно не нужный в нашем Java проекте.


  2. Импортируйте в класс вашего проекта пакет, содержащий классы модели, написав в самом начале кода класса строку:

    import <имя_пакета_модели>.*;

    (Имя пакета модели можно узнать в AnyLogic, зайдя в секцию Специфические свойств модели)



    В нашем конкретном случае нужно написать

    import launching_model.*;



    Обратите внимание, что вводя код в среде Eclipse вы можете пользоваться уже привычным Мастером подстановки кода, появляющимся по нажатию комбинации клавиш Ctrl+пробел (Mac OS: Alt+пробел).

  3. Теперь вы можете ссылаться в коде классов вашего проекта на классы модели. Самый простой способ реализовать предложенное в модели решение - просто скопировать код метода  main() из класса модели MyApplication в класс вашего Java проекта:

Вот и все, теперь вы можете запустить класс вашего проекта как Java приложение. Вы увидите, что запущенное приложение откроет окно модели. Это будет обычное окно презентации, создаваемое и отображающееся при запуске модели.

Информация о ходе моделирования будет выводиться в панель Eclipse Консоль.


См. также

 Встраивание моделей AnyLogic в сторонние Java приложения

 Запуск модели без окна презентации из стороннего приложения