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

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

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

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

Q&A

解決済

1回答

2559閲覧

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

kkgw

総合スコア49

Java

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

0グッド

0クリップ

投稿2016/05/14 07:18

###前提・実現したいこと
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/ツール等のバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

投稿2016/05/14 07:26

dsuzuki

総合スコア1682

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

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

kkgw

2016/05/14 08: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さん大変にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問