Netlogo: внутренняя ошибка с расширением времени - PullRequest
1 голос
/ 21 мая 2019

Я установил расширение времени, но мой код будет установлен, но не запустится. То же самое для моделей, которые я пробовал. Я получаю сообщение об ошибке ниже. Спасибо за вашу помощь! П.С .: Я использую NetLogo версии 6.0.4.

NetLogo is unable to supply you with more details about this error.  
Please report the problem at https://github.com/NetLogo/NetLogo/issues, 
or to bugs@ccl.northwestern.edu, and paste the 
contents of this window into your report

java.lang.IllegalAccessError: tried to access field 
org.nlogo.agent.World.tickCounter from class time.datatypes.LogoSchedule
at time.datatypes.LogoSchedule.getTickCounter(LogoSchedule.java:135)
at time.datatypes.LogoSchedule.performScheduledTasks(LogoSchedule.java:156)
at time.primitives.DiscreteEventSchedulerPrimitives$GoUntil.perform(DiscreteEventSchedulerPrimitives.java:95)
 at org.nlogo.prim._extern.perform(_extern.java:36)
 at org.nlogo.nvm.Context.stepConcurrent(Context.java:107)
 at org.nlogo.nvm.ConcurrentJob.step(ConcurrentJob.scala:65)
 at org.nlogo.job.JobThread.runPrimaryJobs(JobThread.scala:133)
 at org.nlogo.job.JobThread.$anonfun$run$1(JobThread.scala:68)
 at 
 scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
 at scala.util.control.Exception$Catch.apply(Exception.scala:224)
 at org.nlogo.api.Exceptions$.handling(Exceptions.scala:41)
 at org.nlogo.job.JobThread.run(JobThread.scala:66)

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

Боюсь, я не могу сказать, в чем проблема, из сообщения об ошибке.Временное расширение сейчас меняется, потому что команда разработчиков NetLogo обновляет его для включения в будущие выпуски NetLogo.Но они не сделаны, и не все ошибки отсутствуют.

Я использую версию Колина Шеппарда в https://github.com/colinsheppard/time Это было надежно, за исключением примитивов дискретного моделирования событий.Утилиты даты / времени и инструмент временных рядов работают, но мы знаем, что планирование отдельных событий не работает в NetLogo 6.x.Если вы хотите использовать планирование отдельных событий, я боюсь, что вам нужно набраться терпения, пока проект NetLogo не получит полную версию своей отладки.

Я временно выложил здесь довольно полный пример кода: http://langrailsback.com/file-transfers/ Включает версию расширения Колина.

3 голосов
/ 21 мая 2019

Я не уверен в своем ответе;однако

Если вы посмотрите на код (обновлено 14 января 2017 г.) (https://github.com/colinsheppard/time/blob/master/src/main/java/time/datatypes/LogoSchedule.java):

 TickCounter getTickCounter(ExtensionContext context){
            if(tickCounter==null){
                tickCounter = context.workspace().world().tickCounter;          
            }           
            return tickCounter;         
}

Мы увидим, что таймер получает значение tickCounter в мире рабочей области.

Если мы посмотрим на веб-сайт netlogo для обновлений (https://ccl.northwestern.edu/netlogo/docs/transition.html),, то увидим, что:

Одна из наших целей в NetLogo 6.0 - облегчить разработку расширений и упроститьразработать более мощные расширения. С этой целью мы увеличили API расширения с 5.0 до 6.0. Существующие расширения должны будут перекомпилировать изменение «NetLogo-Extension-API-Version» в файле MANIFEST.MF их jar с 5.0 на 6.0.

Некоторые изменения, которые мы внесли в API расширений, включают:

org.nlogo.api.Context теперь разрешает доступ к текущим объектам мира и рабочей области, не требуя приведения в организацию.nlogo.nvm.ExtensionContext. org.nlogo.api.Workspace был представлен в качестве стабильного API для зависимостей расширений. Теперь в BinTray доступен JAR-файл NetLogo. Полный список изменений между 5.0и 6.0, пожалуйста, посетите наше Руководство по переходу на расширение на GitHub.

При этом, я думаю, исходный код для расширения таймера не выполнил миграцию, чтобы соответствовать новым обновлениям.Вы можете видеть, что в нем явно упоминается ExtensionContext.

К сожалению, я считаю, что решение состоит в том, чтобы обновить исходный код таймера и зафиксировать.

...