主人公(Heroクラス)の体力を回復するアイテム(RipoDクラス)を使おうとすると、NullPointerExceptionが出ます。エラーコードの意味はわかりますが、なぜ参照先がnullになっているのか分かりません。
アイテムを使うとき、リスト(ItemListクラス)からアイテムの在庫を減らすために、リストを取得するメソッド(getItemListを呼び出しています。エラーメッセージを見ると、このgetItemListの参照先がnullのようです。
コード中に※印を振りました。
※1が最初に呼び出され、その中で※2を呼び、さらにその中で※3を読んだときに参照先、つまりitemListがnullになっているようです。
mainクラスでItemListもRipoDもインスタンス化してるので、コンストラクタで設定されてるaddItemListが呼び出されてnullにはならないと思うのですが。
なぜnullなのか分かりません。よろしくお願いします。
なぜこのようなめんどくさいコードになってるかには触れないでください、、、、。
エラーメッセージ
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Item.RipoD.getStock(RipoD.java:40)//※3
at Item.RipoD.addStock(RipoD.java:31)//※2
at Item.RipoD.use(RipoD.java:25)//※1
at Main.Main.actionPerformed(Main.java:388)//Mainクラスのrd.use(h);の部分
java
1public class ItemList { 2 private String itemList; 3 4 public void ItemList(){ 5 itemList = ""; 6 } 7 8 public String getItemList() { 9 return itemList; 10 } 11 12 public void addItemList(int itemNumber, String itemName, int stock) { 13 if(itemNumber == 1){ 14 itemList = "(" + itemNumber +")" + itemName + ":" + stock + "個\n"; 15 } 16 else{ 17 itemList += "(" + itemNumber +")" + itemName + ":" + stock + "個\n"; 18 } 19 }
java
1public class RipoD implements Item{ 2 private int stock; 3 private String name; 4 private int itemNumber; 5 ItemList item; 6 7 public RipoD() { 8 9 } 10 11 public RipoD(ItemList item){ 12 stock = 0; 13 name = "リポD"; 14 itemNumber = 1; 15 item.addItemList(itemNumber, name, stock); 16 item.addAllItemList(itemNumber, name); 17 item.addIList(name); 18 } 19 20 public void use(Main.Hero h) { 21 System.out.println("ごく、、、ごく、、、ぷはぁっ!\n体力が少し回復した"); 22 h.addHP(30); 23 addStock(-1); //※1 24 } 25 26 public void addStock(int num) { 27 this.stock += num; 28 String after = this.name + ":" + this.getStock() + num; //※2 29 /*item.changStock(this.name + ":" + this.getStock(), after);*/ 30 } 31 32 public int getStock() { 33 String text = item.getItemList(); //※3 34 /*int number2 = text.indexOf("(" + itemNumber + ")"); 35 int number3 = number2 + 2 + this.name.length() + 2; 36 int stock = Integer.parseInt(text.substring(number3, number3 + 1)); 37 this.stock = stock;*/ 38 return stock; 39 }
java
1public class Main extends JFrame implements MouseListener, ActionListener { 2 3 public JTextArea mainArea; 4 Scanner input = new Scanner(System.in); 5 JMenuItem menuitem1; 6 JMenuItem menuitem2; 7 JMenuItem menuitem3; 8 String userName = ""; 9 JTextField tf; 10 JButton bt; 11 Hero h; 12 int year = 2; 13 int mon = 9; 14 int week = 1; 15 Item.ItemList item = new Item.ItemList(); 16 Item.RipoD rd = new Item.RipoD(item); 17 Item.RipoDX rdx = new Item.RipoDX(item); 18 Item.PowerSyo powsyo = new Item.PowerSyo(item); 19 20 public static void main(String args[]){ 21 rd.use(h); 22 } 23 24
字数制限により、関係ないところはコードを消しています。
回答1件
あなたの回答
tips
プレビュー