2011-08-10 5 views
0

AdvantechというドライバクラスがArrayListの内部に格納されています。私はinitialize私のクラスをインスタンス化します。 AdvantechクラスextendsThreadおよびAdvantechクラスはrun()メソッドを持っています。スレッドは、デバイスに接続するとクラス内で起動されます。 (this.start();ArrayListを使用してスレッドを拡張するクラスを格納する

threadを起動して、そのクラスのインスタンスをArrayListに保存できますか?

set(pos, class)でクラスをインスタンス化して配列リストに戻す(前の位置を上書きする)場合は、class.isAlive()を呼び出すとNullPointerExceptionが返されます。

これを行う方法はありますか?

私は、これは奇妙に聞こえるかもしれ知っているが、そうでない場合、私は8つのスレッドを開始するクラスを作成する必要があるため、私には、例えば、ArrayListを使用しています:

Advantech adv1; 
Advantech adv2; 
Advantech adv3; 
Advantech adv4; 

すべての設定項目は同じです各インスタンス。

コード:Advantech.javaで

private ArrayList<Advantech> advantech = null; 
private Advantech adv = null; 
.... 

adv = new Advantech(/* parameters */); 

adv.initialize(); 

advantech.set(0, adv); 

public class Advantech extends Thread { 

    .... 
    public void run() { 

     while(!done) { // do some work } 
    } 
} 
+2

あなたに何をストーピングされるまで、リストの名前を変更したい場合がありますか?はい、可能です。 – Marcelo

+0

@Marcelo:愚かな質問です。私はNullPointerExceptionを取得します。もう一度お読みください。だからこそ、私はそれを正しく行う方法を求めています。 –

+0

いくつかのコードを投稿してください。これはうまくいくはずです。 – dlev

答えて

1

私は何か(またはあなただけの避難所」を見逃している場合を除きそれを投稿しました)、あなたはArrayList<Advantech>をどこにも建設していないようです。あなたはそれを使用する前に、この行が必要になります(。多分advantechThreadList

// Here, numOfThreads is an int variable that specifies how many threads you want to store 
advantech = new ArrayList<Advantech>(numOfThreads); 

また、あなたはより説明的なもの

+0

は何年もJavaを使用していません。それが問題でした。 –

1

この動作するはずのような何か:

List<Advantech> threads = new ArrayList<Advantech>(8); 

Advantech thread; 
for(int i = 0; i < 8; i++) { 
    thread = new Advantech(); 
    thread.start(); 
    threads.add(thread); 
} 
関連する問題