/ / So speichern Sie ein Java-Objekt in Jython / Python - Java, Python, Python-2.7, Jython

Wie man ein Java-Objekt in Jython / Python speichert - Java, Python, Python-2.7, Jython

Ich baue eine Python-Benutzeroberfläche mit Tkinter. Für die Bedürfnisse des Programms muss ich Python mit Java verbinden, um ein paar Dinge zu tun, also verwende ich ein einfaches Jython-Skript als Linker. Ich kann Tkinter nicht mit Jython verwenden, da es nicht unterstützt wird.

Python (ui.py) -> Jython (linker.py) -> Java (compiled in jars)

Um die Jython-Funktion in Python aufzurufen, verwende ich subprocess wie folgt:

ui.py:

cmd = "jython linker.py""
my_env = os.environ
my_env["JYTHONPATH"] = tons_of_jars
subprocess.Popen(cmd, shell=True, env=my_env)

Dann in der Jython-Datei linker.py, Ich importiere die Java-Klassen, die bereits im JYTHONPATH hinzugefügt wurden, und erstelle ein Objekt mit dem Namen m und Aufruf einiger Funktionen der Java-Klasse.

linker.py:

import handler.handler
m = handler.handler(foo, moo, bar)
m.schedule(moo)
m.getFullCalendar()
m.printgantt()

Die Sache ist, dass ich eine erstellt habe m Objekt, das nach der Hinrichtung von zerstört wird jython linker.py endet. Die Frage ist also: Kann man das retten? m Objekt irgendwo, damit ich es von anrufen kann ui.py wann immer ich will? Wenn dies nicht möglich ist, gibt es einen anderen Weg, dies zu tun?

Danke im Voraus.

Antworten:

2 für die Antwort № 1

Ich habe es endlich gelöst mit ObjectOutputStream.

from java import io

def saveObject(x, fname="object.bin"):
outs = io.ObjectOutputStream(io.FileOutputStream(fname))
outs.writeObject(x)
outs.close()

def loadObject(fname="object.bin"):
ins = io.ObjectInputStream(io.FileInputStream(fname))
x=ins.readObject()
ins.close()
return x