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 № 1Ich 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