code length error ?

Asked by Phillip Kelly

I wrote a 500 line sikuli script to play baccarat on an online casino.
The script was working fine so I decided to add some conditional statements to handle specific events in the game.
I added an additional 2500 lines of code and when I run it I get the following error - what does it mean ?

[error] script [ casino.com] stopped with error at line --unknown--
[error] Could not evaluate error source nor reason. Analyze StackTrace!
[error] java.lang.ClassFormatError: Invalid method Code length 93997 in class file org/python/pycode/_pyx376
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at org.python.core.BytecodeLoader$Loader.loadClassFromBytes(BytecodeLoader.java:119)
at org.python.core.BytecodeLoader.makeClass(BytecodeLoader.java:37)
at org.python.core.BytecodeLoader.makeCode(BytecodeLoader.java:67)
at org.python.compiler.LegacyCompiler$LazyLegacyBundle.loadCode(LegacyCompiler.java:43)
at org.python.core.CompilerFacade.compile(CompilerFacade.java:34)
at org.python.core.Py.compile_flags(Py.java:1717)
at org.python.core.Py.compile_flags(Py.java:1722)
at org.python.core.Py.compile_flags(Py.java:1732)
at org.python.core.__builtin__.execfile_flags(__builtin__.java:514)
at org.python.util.PythonInterpreter.ex

ecfile(PythonInterpreter.java:225)
at org.sikuli.script.SikuliScriptRunner.runPython(Unknown Source)
at org.sikuli.ide.SikuliIDE$ButtonRun.runPython(Unknown Source)
at org.sikuli.ide.SikuliIDE$ButtonRun$1.run(Unknown Source)

java.lang.ClassFormatError: java.lang.ClassFormatError: Invalid method Code length 93997 in class file org/python/pycode/_pyx376

Question information

Language:
English Edit question
Status:
Solved
For:
SikuliX Edit question
Assignee:
RaiMan Edit question
Solved by:
RaiMan
Solved:
Last query:
Last reply:
Revision history for this message
Eugene S (shragovich) said :
#1

It seems that the problem is not in your code but in number of lines. It might reach the maximum allowed number of lines in Java. Looks like the same issue here:
http://stackoverflow.com/questions/7245450/play-invalid-method-code-length

Revision history for this message
RaiMan (raimund-hocke) said :
#2

If Eugene is right, the you have to split your script into sub modules that will be imported.

Revision history for this message
Best RaiMan (raimund-hocke) said :
#3

This is a problem caused by a Java implementation limit:

A compiled class file cannot be larger than 64 KB.

Since internally when running a script, this is compiled into a class file, the script is too large.

I accept this as a bug and will try to find some assistance help for a scripter, to know, when his stuff is too large.

So you have to divide your script into smaller packages.

Revision history for this message
Phillip Kelly (pjk-1966) said :
#4

Thanks RaiMan, that solved my question.