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

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

ただいまの
回答率

90.49%

  • Java

    14075questions

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

ボタンを押した時のエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 542

KakegawaKouiti

score 16

前提・実現したいこと

addButtonで表示した5個のフレームの5つのテキストエリアの文字情報を
clearButtonでワンクリックで全部を取得して、ファイルに書き込むなど。

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

コンパイルは通るが、clearButtonを押すとエラーになる。
解決方法が分かりません。基本的な事で申訳ございません。
分かる方いらっしゃいましたら、何卒宜しくお願い致します。

エラーメッセージ
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at SwingAppMain_kai1.actionPerformed(SwingAppMain_kai1.java:125)
で恐らく、st = array[j].getText();の行のarray[j]がエラーのようです。

該当のソースコード

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.*;
import java.util.HashMap;

public class SwingAppMain_kai1 implements ActionListener {
        private JFrame mainFrame;
        private Container contentPane;
        private JTextField textField;
        private JTextArea textArea;
        private JScrollPane scrollPane;
        private JPanel buttonPane;
        private JButton addButton;
        private JButton clearButton;
    private JFrame mainFrame1;
        private Container contentPane1;
        private JTextField textField1;
        private JTextArea textArea1;
        private JScrollPane scrollPane1;
        private JPanel buttonPane1;
        private JButton addButton1;
        private JButton clearButton1;        
  public static void main(String[] args) {
                new SwingAppMain_kai1();
        }
        public SwingAppMain_kai1(){
                mainFrame = new JFrame("サンプル");
                mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                mainFrame.setSize(320, 200);
                mainFrame.setLocationRelativeTo(null);
                contentPane = mainFrame.getContentPane();
                textField = new JTextField();
                textArea = new JTextArea();
                scrollPane = new JScrollPane(textArea);
                addButton = new JButton("追加");
                clearButton = new JButton("消去");
                addButton.addActionListener(this);
                clearButton.addActionListener(this);
                buttonPane = new JPanel();
                buttonPane.add(addButton);
                buttonPane.add(clearButton);
                contentPane.add(textField, BorderLayout.NORTH);
                contentPane.add(scrollPane, BorderLayout.CENTER);
                contentPane.add(buttonPane, BorderLayout.SOUTH);
                mainFrame.setVisible(true);

        }
        public void actionPerformed(ActionEvent event){
                JTextArea[] array;
                array = new JTextArea[5];
                if(event.getSource() == addButton) {

                for(int i=0;i<5;i++){
                int a=0;
                int b=0;
                a =(int)( Math.random()*1000 ) % 500;
                b =(int)( Math.random()*1000 ) % 500;
                mainFrame1 = new JFrame("サンプル1");
                mainFrame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                mainFrame1.setBounds(a,b, 200, 200);
                contentPane1 = mainFrame1.getContentPane();
                array[i] = new JTextArea();
                scrollPane1 = new JScrollPane(textArea1);
                addButton1 = new JButton("追加");
                clearButton1 = new JButton("消去");
                addButton1.addActionListener(this);
                clearButton1.addActionListener(this);
                buttonPane1 = new JPanel();
                buttonPane1.add(addButton1);
                buttonPane1.add(clearButton1);
                contentPane1.add(array[i], BorderLayout.NORTH);
                contentPane1.add(scrollPane1, BorderLayout.CENTER);
                contentPane1.add(buttonPane1, BorderLayout.SOUTH);
                mainFrame1.setVisible(true);

                }

                }
                if(event.getSource() == clearButton) {

                for (int j=0; j<5 ;j++){
                String st =null;
                st = array[j].getText();
                System.out.print(st);    
                }

        }
        }
}

試したこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

actionPerformedメソッドのはじめに array = new JTextArea[5]; で初期化しています。
このため、clearBVuttonの時には、nullが詰まったarrayに対して、getTextを実行することになります。
addButtonで生成したオブジェクトを利用したいなら、変数arrayをメソッドのローカル変数ではなく、クラス変数とする必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/14 17:06

    出来ました!大変にありがとうございます。
    似た事で困った人のため修正の手順を書きます。ローカル変数ではなく、クラス変数にするというのをどうするのかがすぐには分かりませんでした。
    まず、変数の宣言を一番外、 public static void main(String[] args) { の
    上の行にして、下記のように書きました。
    static JTextArea[] array= new JTextArea[5];
    JTextAreaなんていう型の前にもstaticはつけられるんで、ビックリ!
    そして、使う変数2カ所を下記のように書き換えました。
    前:array[i] = new JTextArea();

    後:SwingAppMain_kai1.array[i] = new JTextArea();

    前:st = array[j].getText();

    後:st = SwingAppMain_kai1.array[j].getText();
    というように、変数の前に、"SwingAppMain_kai1."、"クラス名."にしました。
    クラス変数の書き方って当たり前過ぎるのか、ネットの情報でもあまり見つかりませんでした。dsuzukiさん大変にありがとうございました。

    キャンセル

関連した質問

  • 解決済

    ボタンを動的に作る方法

    ブックマークを管理するGUIアプリをSwingで作ろうとしています。 まずJsonで管理しようと思いJsonにサイト情報を追加するコードを作りました。 それからGUI部分を作ろうと

  • 解決済

    国旗を表示させたい(続き)

    前提・実現したいこと btn [0][1][2]をクリックすると、それに対応した国旗が表示されるようにしたい。 ソースコード import java.awt.*;   

  • 解決済

    JPanelの表示

    ボタンを押すことでパネルが表示されるプログラムを作成しています。 想定結果としては以下の通りです。 drawボタン押下でオレンジ色のパネルが描画される 描画されたオ

  • 解決済

    jtableのクリック時、行取得。

    前提・実現したいこと swingを使用してjtableからクリックされている行の値を取得したいと考えいます。 actionPerformedを使用し、ボタンが押下されたとき

  • 解決済

    javaで特定の文字を打った時JLabelに画像表示したい

    textFieldに文字"test"と打った時 JLabelに画像test.jpgを表示したいです

  • 解決済

    JFrameでのJPanelの切り替えについて

    前提・実現したいこと (例)Java(UIはJFrame)でゲームを作っているのですが、JPanelの切り替えをJFrameで行おうとしています。 しかし、JPanelの切り替

  • 受付中

    java apllet 音源再生

    番号リスト 音楽をappletで再生したい. ボタンstart stopをつけ動作させたい。 実行したこと 形式wmv サイズ55.0 MB (57,710,783 バイト) 音

  • 受付中

    Javaでフレーム内にランダムに数値を表示させたい

    前提・実現したいこと スロットゲームにてボタン入力後ターミナルではなくフレームにランダムな3桁を入力したい。 あわよくば数値によっては言葉を表示させたい。 777ならばBig Bo

同じタグがついた質問を見る

  • Java

    14075questions

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