[解決済み] スレッド "AWT-EventQueue-0" で例外が発生?
2022-01-29 12:58:05
質問
javaとjavax.swingを使って簡単な電卓のプログラムを作っています。
基本的には、ボタンを押すと、そのボタンの機能(数値や操作)を取得し、textAreaに表示するプログラムになっているはずです。
電卓自体のロジックは全部どうでもいいんです。また クリア メニューで、textAreaのテキストをすべて消去します。
しかし、ボタンを押すたびに、以下のようなエラーが発生します。
スレッド "AWT-EventQueue-0" java.lang.NullPointerException で例外が発生しました。 at calculator.CalculatorGUI.actionPerformed(CalculatorGUI.java:106)`.
を押したときにも同様のエラーが発生します。 クリア のメニュー項目は、テキストエリアのテキストを変更したいときに、javaがそれを好まないようです。
以下は私のコードです。(
106行目
は
actionPerfomed
メソッドにラベルを付けました。)
public class CalculatorGUI implements ActionListener
{
// The calculator for actually calculating!
// private RPNCalculator calculator;
// The main frame for the GUI
private JFrame frame;
// The menubar for the GUI
private JMenuBar menuBar;
// The textbox
private JTextArea textArea;
private JScrollPane scrollArea;
// Areas for numbers and operators
private JPanel numKeysPane;
private JPanel opKeysPane;
private String input;
final String[] numbers = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
final String[] operations = { "+", "-", "*", "/" };
/**
* Constructor
*/
public CalculatorGUI() {
// Initialize the calculator
calculator = new RPNCalculator();
}
/**
* Initialize and display the calculator
*/
public void showCalculator() {
String buttonValue;
JButton button;
JMenu menu;
JMenuItem menuItem;
// Create the main GUI components
frame = new JFrame("RPN Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
numKeysPane = new JPanel(new GridLayout(4, 3));
opKeysPane = new JPanel(new GridLayout(2, 2));
initializeMenu();
initializeNumberPad();
initializeOps();
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
JScrollPane scrollArea = new JScrollPane(textArea);
// Create the components to go into the frame and
// stick them in a container named contents
frame.getContentPane().add(numKeysPane, BorderLayout.CENTER);
frame.getContentPane().add(scrollArea, BorderLayout.NORTH);
frame.getContentPane().add(opKeysPane, BorderLayout.LINE_END);
// Finish setting up the frame, and show it.
frame.pack();
frame.setVisible(true);
}
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
String s = (String)e.getActionCommand();
// calculator.performCommand(s);
textArea.append(s + " "); // <<--- THIS IS LINE 106
}
/**
* Initialize the number pad for the calculator
*/
private void initializeNumberPad() {
JButton button;
for (int i = 0; i < numbers.length; i++) {
button = new JButton(numbers[i]);
button.addActionListener(this);
numKeysPane.add(button);
}
}
private void initializeOps(){
JButton button;
for (int i = 0; i < operations.length; i++){
button = new JButton(operations[i]);
button.addActionListener(this);
opKeysPane.add(button);
}
}
/**
* Initialize the menu for the GUI
*/
private void initializeMenu() {
JMenu menu;
JMenuItem menuItem;
JMenuItem menuItem2;
// Create a menu with one item, Quit
menu = new JMenu("Calculator");
menuItem = new JMenuItem("Quit");
// When quit is selected, destroy the application
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// A trace message so you can see this
// is invoked.
System.err.println("Close window");
frame.setVisible(false);
frame.dispose();
}
});
menuItem2 = new JMenuItem("Clear");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
textArea.setText("");
}
});
menu.add(menuItem2);
menu.add(menuItem);
// Create the menu bar
menuBar = new JMenuBar();
menuBar.add(menu);
frame.setJMenuBar(menuBar);
}
/**
* Helper method for displaying an error as a pop-up
* @param message The message to display
*/
private static void errorPopup(String message) {
JOptionPane.showMessageDialog(null, message);
}
}
何かお手伝いいただけることがあれば、ぜひお願いします ありがとうございます!
解決方法は?
を初期化することはありません。
JTextArea
というメンバーフィールドがあります。
textArea
. 宣言の中でメンバーフィールドをシャドーイングしているのです。 これを試してみてください。
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
ではなく
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
関連
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】破損したjarファイル
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】javaで無効な文字定数
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。