2013-01-04 23 views
1

我試圖擴展Jython中的TimerTask以讀取某些傳感器的數據,然後每隔一秒鐘通過網絡發送這些數據。爲了做到這一點,我需要將讀者和服務器對象(以及一些事件對象)傳遞給TimerTask對象。當我嘗試通過Timer.schedule的方法做它,我得到這個錯誤:如何在Jython中擴展Java TimerTask並將參數傳遞給它?

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方法中,但我得到了同樣的結果。

這裏是我的代碼:

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中以這種方式工作。我究竟做錯了什麼?

謝謝你看看這個!

+0

我也在想,也許我可以爲了有機會獲得IButtonHandler的變量創建一個TimerTask作爲一個內部類的IButtonHandler的。我認爲self .__會導致問題,但我不確定jython內部類如何工作。 – Zobal

回答

2

init應該叫__init__

class IButtonTimerTask(TimerTask): 

    def __init__(self, reader, server, enterPressed, runComplete): 
     ^^ ^^ 
+0

arrrrgggg !!!我真是個白癡! – Zobal

+0

我很樂意讚揚你,但我沒有足夠的聲望去做。通過犯這種錯誤我可能不會賺錢... – Zobal

相關問題