- PR -

Subscriberフィールドの保持の仕方

1
投稿者投稿内容
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-02-24 10:37
お世話になっております。まつじんと言います。
現在、JMS通信でSubScriberとPublisherを使ってやり取りをしています。
それで、subscriberを起動させるPGのフィールドにprivate
で値を保持させているのですが、Publisherが起動してsubscriberが受け取りに行った時にprivate で保持していた値が受け取れずエラーが出てしまいます。この場合はどのように保持したらよいのでしょうか。下記がPGになります。
エラーは
java.lang.ArrayIndexOutOfBoundsException
になります。

public class SubscriberSample implements MessageListener {
/** 引数のクラス */
private String [] args;

/**
* 受信待受(subscriber起動)
*
*/
public void executeSubscriber() {
this.args[0] = DataSample;
  
subscriber = Subscriber.createSubscriber(this);

}

/**
* JMSより利用履歴受信
*
*
*/
public void onMessage(Bean bean) {

bean.setData(args[0]); ←ここでエラー

  }
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-24 10:59
DataSample ってのはどこからもらってきた値でしょう?
これがサイズ 0 の配列だってことはないでしょうか?
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-02-24 11:17
すみません。コードが間違っていました。
コンストラクタの引数でもらうような感じになります。
ちなみにコンストラクタが送られているか確認しています。

public class SubscriberSample implements MessageListener {

/** 引数のクラス */
private String [] args;

/**
*
* コンストラクタ
* @param args
*/
public SubscriberSample (String [] className) {
this.args = className;

}

/**
* 受信待受(subscriber起動)
*
*/
public void executeSubscriber() {
  
subscriber = Subscriber.createSubscriber(this);

}

/**
* JMSより利用履歴受信
*
*
*/
public void onMessage(Bean bean) {

bean.setData(args[0]); ←ここでエラー

  }
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-24 14:28
>ちなみにコンストラクタが送られているか確認しています。
えーと、
・「コンストラクタに0より大きい長さの配列が渡されているかどうか現在確認中」
ですか?それとも
・「コンストラクタに渡されている配列は0より大きい長さの配列が渡されていることを確認済み」
ですか?

やっぱり長さが 0 の配列が渡されているのではないかと疑ってしまうのですが・・・。
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2006-02-24 16:02
インギさん、何度も返事を頂きありがとうございます。

配列を確認したところ0より大きい長さの配列が入っておりませんでした。
原因としましては、この処理自体がmain(String [] args)より渡されてくる値だったのですが、Eclipseの実行時に構成及び実行の中で引数を設定しないで実行しておりました。その為、値が入ってもいないのでエラーが表示されたようでした。
ご迷惑をおかけしました。
ありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-24 16:25
解決したとのことで何よりです。
この手のうっかりは一度思いこんでしまうとハマってしまいますよね。
お疲れさまです。
1

スキルアップ/キャリアアップ(JOB@IT)