質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

1回答

4293閲覧

Cannot store to object array because "this.lbl" is null のエラーの意味と解決方法が知りたい

june0327

総合スコア4

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2021/07/24 09:07

前提・実現したいこと

Javaで課題に取り組んでいます。
コンパイルは通ったのですが、以下のエラーメッセージが発生しました。
このソースで何が原因でエラーが発生しているのか。解決方法も教えていただきたいです。

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.NullPointerException: Cannot store to object array because "this.lbl" is null at MyPanel.<init>(Report3_2.java:38) at Report3_2.main(Report3_2.java:12)

該当のソースコード

JAVA

1/**/ 2import java.awt.*; 3import java.awt.event.*; 4import javax.swing.*; 5 6class Report3_2 { 7 public static void main(String[] args){ 8 JFrame frame = new JFrame("Report3_2"); 9 frame.getContentPane().setPreferredSize(new Dimension(500,200)); 10 frame.pack(); 11 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 12 MyPanel panel = new MyPanel(); 13 frame.add(panel); 14 frame.setVisible(true); 15 } 16} 17 18class MyPanel extends JPanel implements ActionListener { 19/* フィールド変数 */ 20 JButton btnRan,btnErase; 21 JPanel north,center; 22 JLabel[] lbl; 23 JLabel bun; 24 boolean hasTargetNumber; 25/* コンストラクタ */ 26 MyPanel(){ 27 /*hasTargetNumberの初期化*/ 28 /* 画面の背景色・レイアウト */ 29 setBackground(Color.lightGray); 30 setLayout(new BorderLayout()); 31 /* [乱数の生成]ボタン作成 */ 32 this.btnRan = new JButton("乱数の生成"); 33 /* [画面クリア]ボタン作成 */ 34 this.btnErase = new JButton("画面クリア"); 35 /* 乱数ラベル作成,空のラベル部品を作る*/ 36 JLabel[] lbl = new JLabel[40]; 37 for(int i = 0; i < 20; i++){ 38 this.lbl[i] = new JLabel(""); 39 } 40 /*[注釈]ラベル作成*/ 41 this.bun = new JLabel(""); 42 /*centerパネルを作る*/ 43 this.center = new JPanel(); 44 this.center.setLayout(new GridLayout(5,4)); 45 for(int i = 0; i < 20; i++){ 46 /*"ここが38行目!"*/this.center.add(this.lbl[i]); 47 } 48 /*northパネルを作る*/ 49 this.north = new JPanel(); 50 this.north.setLayout(new GridLayout(2,1)); 51 this.north.add(this.btnRan); 52 this.north.add(this.bun); 53 /* MyPanel(BorderLayout)にGUI部品をaddしていく */ 54 setLayout(new BorderLayout( )); 55 add (this.north, BorderLayout.NORTH); 56 add(this.center, BorderLayout.CENTER); 57 add (this.btnErase, BorderLayout.SOUTH); 58 } 59 60 @Override 61 public void actionPerformed(ActionEvent e){ 62 if ( e.getSource().equals(this.btnRan) ){ 63 this.bun.setHorizontalAlignment(JLabel.CENTER); 64 this.bun.setForeground(Color.blue); 65 this.bun.setText("生成した乱数は以下のとおりです"); 66 /*乱数の生成*/ 67 int[] ranNum = new int[20]; 68 for(int i = 0; i < 20; i++){ 69 ranNum[i] = (int)(Math.random()*10000); 70 if(hasTargetNumber(ranNum[i])){ 71 this.lbl[i].setForeground(Color.red); 72 String ranStr = String.valueOf(ranNum[i]); 73 this.lbl[i].setText(ranStr); 74 } 75 else{ 76 this.lbl[i].setForeground(Color.black); 77 String ranStr = String.valueOf(ranNum[i]); 78 this.lbl[i].setText(ranStr); 79 } 80 } 81 82 } 83 else if ( e.getSource().equals(this.btnErase) ){ 84 this.bun.setText(""); 85 for(int i = 0; i < 20; i++){ 86 this.lbl[i].setText(""); 87 } 88 } 89 } 90 91 /* 3または7を含んでいたらtrueを、そうでなければ 92 * falseを返す 93 */ 94 boolean hasTargetNumber(int number){ 95 int judge = 0; 96 String ranStr = String.valueOf(number); 97 for(int i=0; i < ranStr.length(); i++){ 98 char num = ranStr.charAt(i); 99 if(num == '3' || num == '7' ){ 100 judge = 1; 101 } 102 else{ 103 } 104 } 105 if(judge == 1){ 106 return true; 107 } 108 else{ 109 return false; 110 } 111 } 112} 113 114

補足情報(FW/ツールのバージョンなど)

コンパイルソフト
Cmder.exe

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/07/24 09:08

>Javaで課題 出題者に聞くべきでは。
guest

回答1

0

関連するところだけ抜き出してみました。

java

1class MyPanel extends JPanel implements ActionListener { 2/* フィールド変数 */ 3 // 略 4 JLabel[] lbl; // (1) 5 // 略 6/* コンストラクタ */ 7 MyPanel(){ 8 // 略 9 /* 乱数ラベル作成,空のラベル部品を作る*/ 10 JLabel[] lbl = new JLabel[40]; // (2) 11 for(int i = 0; i < 20; i++){ 12 this.lbl[i] = new JLabel(""); // (3) 13 } 14 // 以下略
  • (1) フィールド変数 lbl を宣言しています。
  • (2) フィールド変数と同じ名前のローカル変数 lbl を宣言し、初期化しています。
  • (3) this.lbl というのはフィールド変数へのアクセスになります。

このように同じ名前のフィールド変数とローカル変数 (そのメソッドの中だけで使える変数) を宣言すると、別々の変数ができて、単に lbl と書くとローカル変数、this.lbl と書くとフィールド変数へのアクセスになります。このコードではローカル変数 lbl には値 (配列) がありますが、フィールド変数 this.lbl には値がない (null になってる) ためにエラーになります。

投稿2021/07/24 11:06

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問