3

我正在遵循Jython and Java Integration中的说明。

这个想法很简单;制作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() 会导致执行错误?

4

1 回答 1

1

在 Jython 中访问对象的属性时要小心;self.xJython 使用隐式 getter/setter,因此从调用中读取self.getX()等等。在您的 jython 代码中更改所有出现的self.xto self._x(ditto for y) 使其工作(对我而言)。在 Python 中,将非公共成员命名为_....

于 2013-10-08T09:21:54.373 回答