ここから本文です

このJavaのプログラム、コンパイルは出来たのですが、実行したら以下のエラーがで...

nak********さん

2012/1/1712:12:01

このJavaのプログラム、コンパイルは出来たのですが、実行したら以下のエラーがでました
java.lang.NullPointerException
at Workers.run(Fuxi1103.java:15)
原因を教えて頂けるとありがたいです!!

import java.util.*;

class Workers extends Thread {
ItemStack iStack;
int number;

Workers(ItemStack iStak, int number) {
this.iStack = iStack;
this.number = number;
}

public void run() {
try {
while(true) {
int item1 = iStack.getItems();
int item2 = iStack.getItems();
System.out.println("Worker" + number + " get Item " + item1 + " and " + item2);
int t = (int)(10000 * Math.random() + 10000);
Thread.sleep(t);
iStack.finishItems(item1, item2, number);
Thread.sleep(20000);
}
}
catch(Exception e) {
e.printStackTrace();
System.exit(0);
}
}
}

class ItemStack {
private Stack<Integer> s = new Stack<Integer>();
private static int count = 0;
private final static int SIZE = 4;

public ItemStack() {
for(int i = 1; i < 5; i++) {
s.push(new Integer(i));
}
}

synchronized int getItems() {
while(s.empty()) {
try {
wait();
}
catch(Exception e) {
e.printStackTrace();
System.exit(0);
}
}
Integer item = s.pop();

--count;

notifyAll();
return item.intValue();
}

synchronized void finishItems(int item1, int item2, int number) {
while(count == SIZE) {
try {
wait();
}
catch(Exception e) {
e.printStackTrace();
System.exit(0);
}
}
s.push(new Integer(item1));
s.push(new Integer(item2));

count += 2;

System.out.println("Worker" + number + " finished using item " + item1 + " and " + item2);
notifyAll();
}
}

class Fuxi1103 {
public static void main(String args[]) {
ItemStack iStack = new ItemStack();
for(int i = 1; i < 11; i++) {
new Workers(iStack, i).start();
}
}
}

よろしくお願いします!!

閲覧数:
253
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

shi********さん

2012/1/1712:29:34

Workers.run(Fuxi1103.java:15

プログラムの15行目でオブジェクトがない(変数の値がnull)のにオブジェクトを使おうとしてます。
オブジェクトをnewしてるか、newされたオブジェクトが渡されているか確認してください。

質問した人からのコメント

2012/1/18 10:41:25

ありがとうございました!!
アドバイスのおかげで、問題を発見できました!!

ベストアンサー以外の回答

1〜1件/1件中

wat********さん

編集あり2012/1/1712:57:55

Workersのコンストラクタの引数のスペルが間違ってて,this.iStack=iStackの右辺もthis.iStackと解釈されてしまっています。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる