2016-09-08 4 views
0

私の質問は、ティッカーの動作を使用して2秒ごとにファイルの行を別のエージェントに送信する方法ですか?ファイルを1秒ごとに2秒間隔でテロップの動作を使用して送信する

より具体的には、最初の反復では、エージェントは最初の行を送信します。第二に、エージェントは、など二行目を送信し、以下の

マイコード:あなたは何を約あなたのコードに問題はありません言わない

package pack1; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 

import jade.core.AID; 
import jade.core.Agent; 
import jade.core.behaviours.TickerBehaviour; 
import jade.lang.acl.ACLMessage; 
import jade.wrapper.ControllerException; 

public class Agent2 extends Agent { 

    private static final long serialVersionUID = 1L; 
    int nombre_ligne = 0; 
    BufferedReader lecteurAvecBuffer = null; 

    @Override 
    protected void setup() { 
     FileInputStream fis; 
     try { 
      fis = new FileInputStream("/home/hduser/Bureau/word.txt"); 
      @SuppressWarnings("resource") 
      LineNumberReader l = new LineNumberReader(new BufferedReader(
        new InputStreamReader(fis))); 
      while ((l.readLine()) != null) { 
       nombre_ligne = l.getLineNumber(); 
      } 
      lecteurAvecBuffer = new BufferedReader(new FileReader(
        "/home/hduser/Bureau/esclave1/abc.txt")); 
      int a = 1; 
      while (a <= ((int) nombre_ligne)/3) { 
       a++; 
       String word = lecteurAvecBuffer.readLine(); 
       addBehaviour(new TickerBehaviour(this, 2000) { 
        private static final long serialVersionUID = 1L; 

        @Override 
        protected void onTick() { 
         ACLMessage message = new ACLMessage(ACLMessage.INFORM); 
         message.addReceiver(new AID("agent1", AID.ISLOCALNAME)); 
         message.setContent(word); 
         send(message); 
        } 
       }); 
       a++; 
      } 
      lecteurAvecBuffer.close(); 
     } catch (FileNotFoundException exc) { 
      System.out.println("Erreur d'ouverture"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }  
    } 

    protected void takeDown() { 
     System.out.println("Destruction de l'agent"); 
    } 

    @Override 
    protected void afterMove() { 
     try { 
      System.out.println(" La Destination : " 
        + this.getContainerController().getContainerName()); 
     } catch (ControllerException e) { 
      e.printStackTrace(); 
     }  
    }  
} 
+0

:あなたのような、文脈に最終として変数を宣言する必要があり、あなたは内部クラスからローカル変数にアクセスすると

message.setContent(word); 

:私はあなたが少なくとも約コンパイラのメッセージを取得すると思います2秒ごとに行... "という質問はありません。 – AgataB

+0

ティッカーの動作を使用して、ファイルの行を別のエージェントに2秒ごとに送信する方法はありますか? @AgataB –

+0

そうですね、それは意味があります。申し訳ありませんが、何かが不足していると考えまし – AgataB

答えて

0

。送信」

final String word = lecteurAvecBuffer.readLine(); 
関連する問題