2012-08-30 9 views
8

मैं एक मौजूदा जावा एसई ऐप माइग्रेट करके अक्का सीखना शुरू कर रहा हूं। मैं अक्का 2.0.3 का उपयोग कर रहा हूँ।जावा में एक अभिनेता को एक जहर पिल भेजना

एक बिंदु पर मुझे अभिनेताओं को रोकने के लिए संदेश कतार के माध्यम से एक जहर पिल भेजने की आवश्यकता है। मेरे अभिनेता इस प्रकार instantiated है:

ActorRef myActor = actorSystem.actorOf(new Props(MyActor.class), "myActor"); 

जो मैं PoisonPill भेजने का प्रयास करने के लिए:

myActor.tell(PoisonPill.getInstance()); 

लेकिन मैं निम्नलिखित संकलक त्रुटि मिलती है:

'tell(java.lang.Object)' in 'akka.actor.ActorRef' cannot be applied to '(akka.actor.PoisonPill$)' 

क्या मैं गलत कर रहा हूँ? मैं आइडिया में जावा 1.6.0_26 चला रहा हूं (जिसे मैं एक्लिप्स में जीवन भर के बाद भी सीख रहा हूं)।


संपादित करें:

मैं भी इस दृष्टिकोण है, जो दस्तावेज में है की कोशिश की है, लेकिन मैं एक ही संकलक त्रुटि मिलती है और आइडिया मुझे चेतावनी दी है कि अभिनेता वर्ग मान्य नहीं है।

import static akka.actor.Actors.*; 
extractionActor.tell(poisonPill()); 
+7

प्रश्न के शीर्षक के लिए +1। मुझे नहीं पता कि यह किस बारे में है लेकिन यह थ्रिलर या डरावनी फिल्म से एक दृश्य की तरह थोड़ा सा पढ़ता है :-) – Ridcully

+0

यह बहुत सच है - मैं इसे कभी नहीं पढ़ूंगा! मेरा विश्वास करो, मैं वास्तव में वास्तविक जीवन में एक बहुत अच्छा व्यक्ति हूँ। – Rich

उत्तर

6

कृपया अक्का दस्तावेज़ पढ़ें, हम इसे बनाने में बहुत समय खर्च किया है:

PoisonPill

You can also send an actor the akka.actor.PoisonPill message, which will stop the actor when the message is processed. PoisonPill is enqueued as ordinary messages and will be handled after messages that were already queued in the mailbox.

Use it like this:

import static akka.actor.Actors.*; 
    myActor.tell(poisonPill()); 

ऊपर दृष्टिकोण 2.0.2 के बाद से बहिष्कृत कर दिया गया , यह नया एपीआई है:

ActorRef ref = system.actorOf(new Props(JavaAPITestActor.class)); 
ref.tell(PoisonPill.getInstance()); 

उपरोक्त मेरे मशीन पर संकलित करता है ताकि आपको आईडीईए में कुछ समस्या हो सकती है? इसे जावैक से संकलित करने का प्रयास करें और देखें कि क्या यह काम करता है।

+0

क्षमा करें, मुझे कहना चाहिए था, मैंने प्रलेखन पढ़ा था और मैंने सवाल पूछने से पहले कोशिश की थी, लेकिन न केवल मुझे एक ही संकलन त्रुटि मिलती है, मुझे यह भी बताया गया है कि अभिनेताओं को बहिष्कृत किया गया है, यही कारण है कि मैंने दूसरे की कोशिश की दृष्टिकोण। मैं अपना जवाब अपडेट करूंगा। – Rich

+0

ग्रेट, धन्यवाद, मैंने बहिष्कृत और नई एपीआई दोनों को प्रतिबिंबित करने के लिए अपना जवाब संपादित कर लिया है। –

+0

मैं ग्रहण पर वापस चले गए हैं और यह ठीक संकलित है! मुझे लगता है कि यह आइडिया में एक बग हो सकता है, लेकिन शायद यह एक आईडीई में कुछ गलत करने का मामला है, मुझे अच्छी तरह से पता नहीं है ... – Rich

4

उपरोक्त टिप्पणी के उत्तर में उल्लिखित अनुसार, यह आइडिया में काम नहीं करता है या संकलन के लिए ग्रेडल का उपयोग करते समय। यह वास्तव में एक संकलन त्रुटि है क्योंकि प्रेषक ActorRef की आवश्यकता है। मैं जानता हूँ कि पिछले जवाब पुराने हैं, और यदि इस एपीआई में एक परिवर्तन किया गया मुझे यकीन नहीं हूँ, इसलिए किसी को भी एक ऐसी ही समस्या हो रही के लिए आप का उपयोग करना चाहिए:

target.tell(PoisonPill.getInstance(), ActorRef.noSender()); 

संदर्भ देखें: http://doc.akka.io/docs/akka/snapshot/java/lambda-actors.html#PoisonPill

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