Version 1.9.5.2 (24-Oct-2023)
Bugfix:
- Fixed
Throwable: java.lang.LinkageError: loader constraint violation: when resolving method
issue in theRobotClassLoader
.
Throwable: java.lang.LinkageError: loader constraint violation: when resolving method
issue in the
RobotClassLoader
.ClassCastException
with URLClassLoader
when accessing ClassLoader.getSystemClassLoader()
on Java version newer
than Java 8 and running with -DNOSECURITY=true
._JAVA_OPTIONS
is now set automatically regardless of the Java
version.Please note that you should be aware of which version of Java you are using for running Robocode. Otherwise, Robocode might not start.
You can check this by running this command in a terminal: java -version
. If you are running on a Java version older than version 12, you need to uncomment or remove this line in the robocode.bat
or robocode.sh
file:
_JAVA_OPTIONS="-Djava.security.manager=allow"
If you are running on Java 12 or newer, then the above line is required, and should not be removed!
_JAVA_OPTIONS="-Djava.security.manager=allow"
if you run on Robocode on a Java version older
than version 12, and you can disable Direct3D on Windows, and also set the rasterizer used in Direct3D. Have a look at
robocode.bat
and robocode.sh
if you want to see the details.sun.java2d
programmatically anymore as these give different results on different
hardware (obviously). So the user needs to set these explicitly as options when starting up Robocode. Go to
this page if you want to experiment withNOSECURITY=true
could cause a ClassNotFoundException
for the robots.sun.java2d.ddoffscreen=false
. Hence, this setting has been removed.NOSECURITY
or EXPERIMENTAL
property has been set to true, a warning is now printed out to standard out. sun.java2d.d3d=false
(turn off use of Direct3D)sun.java2d.ddoffscreen=false
(turn of Direct Draw off-screen)sun.java2d.noddraw=true
(no use of Direct Draw)sun.java2d.opengl=True
-source 1.5
to the ECJ compiler options to prevent "...only available if source level is 1.5 or greater"
error when compiling with ECJ. NOSECURITY=true
(e.g. via the -DNOSECURITY=true
property in the java
command-line), then internal security manager of Robocode is now totally disabled, and falling back on the default
security manager used in Java.ClassNotFoundExceptions
, and
other issues as well.Newer versions of Java is making things harder for the codebase of Robocode.
With Java 18 (JEP 411), the Security Manager is disabled by default, but can be allowed by the user from the command line.
Hence, with this version of Robocode, the -Djava.security.manager=allow
system property has been added to the script for making it possible to run Robocode on Java 18. Note that this is just a work-around, as the Security Manager will be permanently removed from Java at some point in the future when newer major versions of Java are released.
This is a big concern for Robocode, which uses the Security Manager to control access to various resources between robots running on the same JVM. And currently, no good substitute exists for replacing the Security Manager (or find a good way to remove it) from Robocode without breaking things.
-Djava.security.manager=allow
.