Menu

#36 Error when instantiate RobocodeEngine

none
open
nobody
None
1
2023-02-11
2023-02-10
Anonymous
No

Hello,

I am trying to instantiate a RobocodeEngine in a project in Java, but an error occurs:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -javaagent:/home/jfernandez/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/211.6693.111/lib/idea_rt.jar=38731:/home/jfernandez/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/211.6693.111/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jfr.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar:/home/jfernandez/Downloads/IA/upm/tfm/poc_create_battle/target/classes:/home/jfernandez/.m2/repository/net/sf/robocode/robocode.core/1.9.4.8/robocode.core-1.9.4.8.jar:/home/jfernandez/.m2/repository/org/picocontainer/picocontainer/2.15/picocontainer-2.15.jar:/home/jfernandez/.m2/repository/net/sf/robocode/robocode.api/1.9.4.8/robocode.api-1.9.4.8.jar RunBattle -Djava.security.manager=allow
Loaded net.sf.robocode.api
Loaded net.sf.robocode.core
org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: net.sf.robocode.core.RobocodeMain has unsatisfied dependency 'interface net.sf.robocode.recording.IRecordManager' for constructor 'public net.sf.robocode.core.RobocodeMain(net.sf.robocode.settings.ISettingsManager,net.sf.robocode.host.IHostManager,net.sf.robocode.battle.IBattleManager,net.sf.robocode.recording.IRecordManager,net.sf.robocode.version.IVersionManager)' from org.picocontainer.DefaultPicoContainer@1134affc:3<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
at org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:331)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:621)
at org.picocontainer.classname.DefaultClassLoadingPicoContainer.getComponent(DefaultClassLoadingPicoContainer.java:181)
at org.picocontainer.containers.AbstractDelegatingPicoContainer.getComponent(AbstractDelegatingPicoContainer.java:50)
at net.sf.robocode.core.Container.getComponent(Container.java:245)
at net.sf.robocode.core.RobocodeMainBase.initContainerForRobocodeEngine(RobocodeMainBase.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at net.sf.robocode.security.HiddenAccess.initContainerForRobotEngine(HiddenAccess.java:253)
at robocode.control.RobocodeEngine.init(RobocodeEngine.java:138)
at robocode.control.RobocodeEngine.<init>(RobocodeEngine.java:72)
at RunBattle.main(RunBattle.java:7)</init>

org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: net.sf.robocode.core.RobocodeMain has unsatisfied dependency 'interface net.sf.robocode.recording.IRecordManager' for constructor 'public net.sf.robocode.core.RobocodeMain(net.sf.robocode.settings.ISettingsManager,net.sf.robocode.host.IHostManager,net.sf.robocode.battle.IBattleManager,net.sf.robocode.recording.IRecordManager,net.sf.robocode.version.IVersionManager)' from org.picocontainer.DefaultPicoContainer@1134affc:3<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
at org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:331)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:621)
at org.picocontainer.classname.DefaultClassLoadingPicoContainer.getComponent(DefaultClassLoadingPicoContainer.java:181)
at org.picocontainer.containers.AbstractDelegatingPicoContainer.getComponent(AbstractDelegatingPicoContainer.java:50)
at net.sf.robocode.core.Container.getComponent(Container.java:245)
at net.sf.robocode.core.RobocodeMainBase.initContainerForRobocodeEngine(RobocodeMainBase.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at net.sf.robocode.security.HiddenAccess.initContainerForRobotEngine(HiddenAccess.java:253)
at robocode.control.RobocodeEngine.init(RobocodeEngine.java:138)
at robocode.control.RobocodeEngine.<init>(RobocodeEngine.java:72)
at RunBattle.main(RunBattle.java:7)</init>

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at net.sf.robocode.security.HiddenAccess.initContainerForRobotEngine(HiddenAccess.java:253)
at robocode.control.RobocodeEngine.init(RobocodeEngine.java:138)
at robocode.control.RobocodeEngine.<init>(RobocodeEngine.java:72)
at RunBattle.main(RunBattle.java:7)
Caused by: org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: net.sf.robocode.core.RobocodeMain has unsatisfied dependency 'interface net.sf.robocode.recording.IRecordManager' for constructor 'public net.sf.robocode.core.RobocodeMain(net.sf.robocode.settings.ISettingsManager,net.sf.robocode.host.IHostManager,net.sf.robocode.battle.IBattleManager,net.sf.robocode.recording.IRecordManager,net.sf.robocode.version.IVersionManager)' from org.picocontainer.DefaultPicoContainer@1134affc:3<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
at org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:331)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:621)
at org.picocontainer.classname.DefaultClassLoadingPicoContainer.getComponent(DefaultClassLoadingPicoContainer.java:181)
at org.picocontainer.containers.AbstractDelegatingPicoContainer.getComponent(AbstractDelegatingPicoContainer.java:50)
at net.sf.robocode.core.Container.getComponent(Container.java:245)
at net.sf.robocode.core.RobocodeMainBase.initContainerForRobocodeEngine(RobocodeMainBase.java:88)
... 8 more</init>

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at net.sf.robocode.security.HiddenAccess.initContainerForRobotEngine(HiddenAccess.java:253)
at robocode.control.RobocodeEngine.init(RobocodeEngine.java:138)
at robocode.control.RobocodeEngine.<init>(RobocodeEngine.java:72)
at RunBattle.main(RunBattle.java:7)
Caused by: org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: net.sf.robocode.core.RobocodeMain has unsatisfied dependency 'interface net.sf.robocode.recording.IRecordManager' for constructor 'public net.sf.robocode.core.RobocodeMain(net.sf.robocode.settings.ISettingsManager,net.sf.robocode.host.IHostManager,net.sf.robocode.battle.IBattleManager,net.sf.robocode.recording.IRecordManager,net.sf.robocode.version.IVersionManager)' from org.picocontainer.DefaultPicoContainer@1134affc:3<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
at org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:331)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:621)
at org.picocontainer.classname.DefaultClassLoadingPicoContainer.getComponent(DefaultClassLoadingPicoContainer.java:181)
at org.picocontainer.containers.AbstractDelegatingPicoContainer.getComponent(AbstractDelegatingPicoContainer.java:50)
at net.sf.robocode.core.Container.getComponent(Container.java:245)
at net.sf.robocode.core.RobocodeMainBase.initContainerForRobocodeEngine(RobocodeMainBase.java:88)
... 8 more</init>

The way that I instantiate this object is:

RobocodeEngine robocodeEngine=new RobocodeEngine(new File("/home/jfernandez/robocode"));

where file is the path where robocode is installed in my computer.

I am running executing java 8 using operating system Ubuntu 20.04.5 LTS, the IDE that I am using is IntelliJ and robocode version is 1.9.4.8 (the latest available in Maven). Can you help me?

Thank you very much!!

Discussion

  • Flemming N. Larsen

    I don't know why it is not working for you, and I can't tell just by looking at the stack trace, even though you did right by including it in this support request. 👍

    Instead, I tried this myself on my Ubuntu 22.04.1 LTS running with OpenJDK 11.0.17.
    I recommend that you use a newer version of Java than 8, which is really old.

    I just took the code from the Example section of this javadoc page:
    https://robocode.sourceforge.io/docs/robocode/robocode/control/package-summary.html

    I created a folder (test) where I copied all required jar files for robocode into this test folder.
    Then I created the BattleRunner.java with the code from the example.

    I then changed the line with:
    new java.io.File("C:/Robocode")

    Into:
    new java.io.File("/home/fnl/robocode")

    But you'll need to change it to your specific directory contaning Robocode on your system, of course.

    I then compile and run the Battle runner like this:
    java -cp robocode.jar BattleRunner.java

    This works as a charm on my system.

    I included a zip archive with all the files I used from Robocode version 1.9.4.8.

     

    Last edit: Flemming N. Larsen 2023-02-10
  • Flemming N. Larsen

    Also notice, that I changed my robocode.sh file in my robocode folder, as I used Java 11, i.e. a Java version below version 12:

    pwd=`pwd`
    cd "${0%/*}"
    # Older than Java 12
    java -Xmx512M -cp "libs/*" -XX:+IgnoreUnrecognizedVMOptions "--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED" "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED" "--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED" "--add-opens=java.desktop/sun.awt=ALL-UNNAMED" robocode.Robocode $*
    
    # Java 12 and newer
    # java -Xmx512M -cp "libs/*" -Djava.security.manager=allow -XX:+IgnoreUnrecognizedVMOptions "--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED" "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED" "--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED" "--add-opens=java.desktop/sun.awt=ALL-UNNAMED" robocode.Robocode $*
    cd "${pwd}"
    
     
  • Anonymous

    Anonymous - 2023-02-10

    I have detected the problem that I had with the project, so I write here the solution in case it helps someone in the future with the same problem. I had only included in pom.xml the dependencies robocode.core and robocode.api, assuming that this was enough. However, thanks the note in javadoc https://robocode.sourceforge.io/docs/robocode/robocode/control/package-summary.html I realized that I possibly needed to include more dependencies:

    "In order to avoid ClassNotFoundException with your application, you will need to add most of the .jar files located under the /libs folder of the robocode directory to the classpath of your application. That is robocode.jar, picocontainer-xxx.jar etc. You can leave out roborumble.jar and the ones for UI and sound if you don't use the UI with the RobocodeEngine."

    I have included the dependency robocode.battle and this have solved my problem. I don't know if in the future and I will need to include more dependencies, but for now that is enough.

    Thank you very much for your quick response Flemming.

    All the best

     
  • Flemming N. Larsen

    You are welcome.

    Is there anything I can do in order to make sure people includes all most/all the libraries from the robocode/libs folder, when they use the RobocodeEngine? If so, I will update the documentation where is will help people.

     

Anonymous
Anonymous

Add attachments
Cancel





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.