This is a Jython’s major shortcoming when dealing w/ Java’s overloaded methods & constructors: ![]()
You see, method text() got 9 overloaded signatures: ![]()
At self.graphics.text(self.character[x][y], int(x * tileSize), int(y * tileSize), int(tileSize), int(tileSize)), you’re attempting to use text()'s 7th sig w/ 5 parameters:
text(str, x1, y1, x2, y2).
But I’m highly suspicious Jython actually invokes text()'s 4th sig instead, which also got 5 parameters:
text(chars, start, stop, x, y).
| chars | char: the alphanumeric symbols to be displayed |
| start | int: array index at which to start writing characters |
| stop | int: array index at which to stop writing characters |
So it seems Jython is passing your self.character[x][y] argument as if it were a Java char[] array instead of an actual String! ![]()
Unfortunately, Jython doesn’t have any native feature to allow us to forcibly pick a particular overloaded sig of a Java method when its own auto choice fails. ![]()
For such cases, our last recourse would be to rely on the Java’s reflection API as I did in the forum post I’ve linked above. ![]()
But for your particular case, there’s a much easier workaround: Use Java’s own String datatype: ![]()
Docs.Oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html
from java.lang import String
def set(self, x, y, character):
self.character[x][y] = String(character)
self._update.append((x,y))