首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Jython中扩展java TimerTask并向其传递参数?

如何在Jython中扩展java TimerTask并向其传递参数?
EN

Stack Overflow用户
提问于 2013-01-05 03:45:06
回答 1查看 251关注 0票数 1

我正在尝试扩展Jython语言中的TimerTask,以便从一些传感器读取数据,然后每隔一秒通过网络发送这些数据。为此,我需要将读取器和服务器对象(以及一些事件对象)传递给TimerTask对象。当我尝试通过Timer.schedule方法来做这件事时,我得到了这个错误:

代码语言:javascript
运行
复制
File "C:\Documents\src\iButtonHandler.py", line 61, in run
TypeError: org.python.proxies.iButtonHandler$IButtonTimerTask$1(): expected 0 args; got 4

我猜想Timer.schedule方法调用了TimerTaskObject的run方法,但是为什么它不先调用__init__呢?我还尝试将参数添加到TimerTaskrun方法中,但得到的结果是相同的。

下面是我的代码:

代码语言:javascript
运行
复制
class IButtonTimerTask(TimerTask):

    def init(self, reader, server, enterPressed, runComplete):
        self.__reader = reader
        self.__server = server
        self.__enterPressed = enterPressed
        self.__runComplete = runComplete

    def run(self):
        iButtonData = self.__reader.getAllValues()
        self.__server.sendData(iButtonData):
        if self.__enterPressed.isSet():
            self.cancel()
            self.__runComplete.set()

class IButtonHandler(threading.Thread):

    def __init__(self, port, container, enterPressedEvent, exitEvent):

        threading.Thread.__init__(self, name='iButton Handler Thread')
        print 'creating ibutton thread'
        self.__container = container
        self.__reader = IButtonContainerReader(self.__container)
        self.__containerId = self.__reader.getID()
        self.__server = MyServer(port, name=self.__containerId)
        self.__enterPressed = enterPressedEvent
        self.__exitEvent = exitEvent
        self.__runComplete = threading.Event()
        self.start()


    def run(self):
        print 'ibutton thread running'
        if self.__server.listen():
            timer = Timer()
            timer.schedule(IButtonTimerTask(self.__reader, self.__server, self.__enterPressed, self.__runComplete), 0, 1000)

        self.__runComplete.wait()
            print 'iButton handler %s exiting' %self.__containerId
            timer.cancel()
            self.shutDown()
            return

我看到,在普通的Java语言中,您只需扩展TimerTask并在Timer.schedule方法中调用new MyTimerTask(...)。在Jython中,我似乎无法让它以这种方式工作。我做错了什么?

谢谢你看这篇文章!

EN

Stack Overflow用户

回答已采纳

发布于 2013-01-05 04:03:16

您的init应该称为__init__

代码语言:javascript
运行
复制
class IButtonTimerTask(TimerTask):

    def __init__(self, reader, server, enterPressed, runComplete):
        ^^    ^^
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14163850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档