2012-07-12 12 views
6

उदाहरण के लिए मैं इस थ्रेड को ज्योथन में पुन: पेश करना चाहता हूं क्योंकि मुझे जावा एपीआई से स्टेटमाचिन शुरू करने की आवश्यकता है। मुझे ज्योथन में ज्यादा ज्ञान नहीं है। मैं उसे कैसे कर सकता हूँ?मैं जावा थ्रेड के रूप में ज्योथन धागे का उपयोग कैसे कर सकता हूं?

class Cycle(Thread, widgets.Listener): 
    def run(self): 
     self.statemachine = New64CycleBasedStatemachine() 
     self.statemachine.enter() 
     while not self.currentThread().isInterrupted(): 
      self.statemachine.getInterfaceNew64().getVarMessage() 
      self.statemachine.runCycle() 
      try: 
       self.currentThread().sleep(100) 
      except InterruptedException: 
       self.interrupt() 
     self.start() 

foo = Cycle() 
foo.run() 
#foo.start() 

पुनश्च::

Thread thread = new Thread() { 
    @Override 
    public void run() { 
     statemachine.enter(); 
     while (!isInterrupted()) { 
      statemachine.getInterfaceNew64().getVarMessage(); 
      statemachine.runCycle(); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       interrupt(); 
      } 
     }    
    } 
}; 
thread.start(); 

तो मैं कुछ इस तरह कोशिश कर रहा हूँ मैं पहले से ही क्या foo.run()

क्या मैं गलत कर रहा हूँ के तहत टिप्पणी की है करने की कोशिश की?

उत्तर

2

ठीक है, विधि के भीतर से start() विधि को कॉल करने के तथ्य को छोड़कर, यह वास्तव में एक बुरा विचार है क्योंकि एक बार धागा शुरू हो जाने पर, यदि आप इसे फिर से शुरू करने का प्रयास करते हैं तो आपको एक थ्रेड स्टेट अपवाद मिलेगा , इसे एक तरफ सेट करना, समस्या यह है कि, संभवतः, आप ज्योथन थ्रेडिंग लाइब्रेरी का उपयोग कर रहे हैं, न कि जावा की।

आप के रूप में आयात करने के लिए सुनिश्चित करें इस प्रकार है:

from java.lang import Thread, InterruptedException 

इसके बजाय

from threading import Thread, InterruptedException 

की और अगर आप समस्या मैं ऊपर उद्धृत को सही, संभावना है कि अपने कोड ठीक चलेगा।

Jython के threading पुस्तकालय का उपयोग करना, आप कोड थोड़ा बदलने के लिए, कुछ हद तक की तरह की आवश्यकता होगी:

from threading import Thread, InterruptedException 
import time 

class Cycle(Thread): 
    canceled = False 

    def run(self): 
     while not self.canceled: 
      try: 
       print "Hello World" 
       time.sleep(1) 
      except InterruptedException: 
       canceled = True 

if __name__ == '__main__': 
    foo = Cycle() 
    foo.start() 

प्रकट होता है कौन सा मेरे लिए काम करने के लिए।

+0

आपको बहुत धन्यवाद, मुझे लगता है कि मेरी समस्या यह थ्रेड के साथ नहीं थी और बस मेरे राज्यमाचिन के साथ थी। ध्यान देने के लिये धन्यवाद! – hudsonsferreira

संबंधित मुद्दे

 संबंधित मुद्दे