1

TimerTaskJython を拡張していくつかのセンサーからデータを読み取り、そのデータをネットワーク経由で 1 秒ごとに送信しようとしています。そのためには、リーダー オブジェクトとサーバー オブジェクト (およびいくつかのイベント オブジェクト) をオブジェクトに渡す必要がありTimerTaskます。メソッドを使用して実行しようとすると、次のTimer.scheduleエラーが発生します。

File "C:\Documents\src\iButtonHandler.py", line 61, in run
TypeError: org.python.proxies.iButtonHandler$IButtonTimerTask$1(): expected 0 args; got 4

Timer.scheduleメソッドが の run メソッドを呼び出していると思いますTimerTaskObjectが、最初に を呼び出さないのはなぜ__init__ですか? TimerTaskのメソッドにパラメータを追加しようとしましたrunが、同じ結果が得られます。

これが私のコードです:

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して呼び出すだけです。Jythonでそのように機能させることはできないようです。私は何を間違っていますか? new MyTimerTask(...)Timer.schedule

これを見てくれてありがとう!

4

1 に答える 1

2

あなたinitは呼ばれるべきです__init__

class IButtonTimerTask(TimerTask):

    def __init__(self, reader, server, enterPressed, runComplete):
        ^^    ^^
于 2013-01-04T20:03:15.633 に答える