我正按照Jython and Java Integration中的说明进行操作。
这个想法很简单; make Java接口,并匹配python类。 问题是,使用接口函数setX()和setY()时,我总是在执行文件时出错。我必须修改名称,如setXvalue()或setYvalue(),以避免错误。
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class
org.python.core.PyTraceback
at org.python.core.PyException.tracebackHere(PyException.java:158)
at org.python.core.PyObject._jcall(PyObject.java:3587)
at org.python.proxies.Arith$Arith$0.setX(Unknown Source) <-- ERROR???
at Main.main(Main.java:14)
package org.jython.book.interfaces;
这是一个Java界面。
public interface ArithType {
public void setX(int x); // <-- Error
public void setYa(int x);
public int getXa();
public int getYa();
public int add();
}
这是部分python类。
class Arith(ArithType):
''' Class to hold building objects '''
def setX(self, x): # << Error
self.x = x
您可以在此网站找到要测试的来源 - https://dl.dropboxusercontent.com/u/10773282/2013/Archive.zip
这有什么问题?为什么方法名称setX()或setY()导致执行错误?
答案 0 :(得分:1)
小心访问Jython中对象的属性; Jython使用隐式getter / setter,因此从self.x
读取会调用self.getX()
,依此类推。在您的jython代码中将所有出现的self.x
更改为self._x
(同上为y
)使其成功(对我而言)。实际上,Python中的惯例是将非公共成员命名为_...
。