2014-02-11 2 views
1

나는 Tkinter를 사용하여 파이썬 UI를 만들고있다. 프로그램의 필요에 따라 필자는 Python과 Java를 연결하여 간단한 작업을 수행하므로 간단한 Jython 스크립트를 링커로 사용하고 있습니다. Jython과 함께 Tkinter를 사용할 수 없기 때문에 사용할 수 없습니다.자이 썬/파이썬에서 자바 객체를 저장하는 방법

ui.py :

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

다음, 자이 썬 파일, linker.py에, 나는 가져

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

다음과 같이 내가 subprocess을 사용하여 파이썬에서 자이 썬 함수를 호출하려면 Java 클래스는 이미 JYTHONPATH에 추가되었고, 이름은 m 인 오브젝트를 작성하고 Java 클래스의 일부 기능을 호출합니다.

linker.py는 :

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

것은 내가 jython linker.py 끝의 실행 후 파괴 될 m 객체를 만든 것입니다. 그래서 질문은 : m 개체를 어딘가에 저장할 수 있습니까? 언제든지 원할 때마다 ui.py에서 호출 할 수 있습니까? 가능하지 않은 경우 다른 방법이 있습니까?

미리 감사드립니다.

+1

'피클'을 사용해 보셨습니까? http://en.wikipedia.org/wiki/Pickle_%28Python%29 –

+0

나는 단순한 파이썬 스크립트로'pickle' 모듈을 시도해 보았습니다. 그러나 그것은 Java 객체를 저장해야하므로 내 작업에는 효과가 없습니다. 다음 오류가 발생했습니다 :'raise TypeError, "% s 오브젝트"% base .__ name__ "을 pickle 할 수 없습니다. 사전에 감사드립니다 –

답변

2

마지막으로 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 
+0

잠시 있었지만 파일에서 객체를로드 할 때 ClassNotFoundExceptions를 피하거나 처리 한 방법을 기억합니까? – styks

관련 문제