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

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

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

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

Q&A

2回答

10243閲覧

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2016/10/18 04:21

Java

1package pack; 2 3import java.awt.EventQueue; 4import java.awt.Font; 5import java.awt.TextComponent; 6import java.awt.event.ActionEvent; 7import java.awt.event.ActionListener; 8import java.awt.event.KeyEvent; 9import java.awt.event.KeyListener; 10 11import javax.swing.JFrame; 12import javax.swing.JLabel; 13import javax.swing.JTextField; 14 15public class TypingSample2 { 16 17 private JFrame frmTypesample; 18 long ptime; //プレスされた時間 19 long rtime;//リリースされた時間 20 long time [][] = new long[1000][1000];// 21 long[][] c = new long [1000][1000];//出現頻度カウント用 22 long avTime[][] = new long [1000][1000];//平均時間 23 int firstkey=0;// 24 int secondkey=0; 25 int count; 26 String userstr; 27 String pristr[]={"トウカイダイガク","メイジダイガク","ヤマモトセンセイ","ケンキュウシツ","ツウシンネットワーク", 28 "ゼミナール","ズートピア","チイバス","クォーター","ミディアム", 29 "ライブビューイング","ゲンダイブンメイロン","ページフォルト","セカイゾウノヘンセン","アイデンティティトキョウセイ", 30 "チイキシャカイ","チェックポイント","ファストフード","フーリエヘンカン","ゼンゼンゼンセ"}; 31 int r = 0; 32 33 public TextComponent textField; 34 /** 35 */ 36 public static void main(String[] args) { 37 EventQueue.invokeLater(new Runnable() { 38 public void run() { 39 try { 40 TypingSample2 window = new TypingSample2(); 41 window.frmTypesample.setVisible(true); 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } 45 } 46 }); 47 } 48 /** 49 * Create the application. 50 */ 51 public TypingSample2() { 52 initialize(); 53 } 54 55 /** 56 * Initialize the contents of the frame. 57 */ 58 59 private void initialize() { 60 frmTypesample = new JFrame(); 61 frmTypesample.setTitle("TypingSample2"); 62 frmTypesample.setBounds(100, 100, 561, 191); 63 frmTypesample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 64 frmTypesample.getContentPane().setLayout(null); 65 66 JLabel Label = new JLabel("Enterを押すとはじまります"); 67 Label.setFont(new Font("MS UI Gothic", Font.PLAIN,20)); 68 Label.setBounds(34, 30, 331, 43); 69 frmTypesample.getContentPane().add(Label); 70 71 JTextField textField = new JTextField(); 72 textField.setFont(new Font("M113, 24", Font.PLAIN, 20)); 73 textField.setBounds(34, 83, 483, 52); 74 frmTypesample.getContentPane().add(textField); 75 textField.addKeyListener(new Keyboard_input()); 76 77 textField.addActionListener( 78 new ActionListener(){ 79 public void actionPerformed(ActionEvent e){ 80 Label.setText(""); 81 Label.setText(pristr[r]); 82 83 textField.setText(""); 84 count++; 85 if(count == 20){ 86 87 System.out.println("-----------------------------result-----------------------------"); 88 for(int i=65;i<=90;i++){ 89 System.out.println("["+ i + "]:Time=" + avTime[i]); 90 System.out.println("Count=" + c[i]); 91 } 92 System.exit(0); 93 } 94 r++; 95 96 97 /* 処理したい内容をここに記述する */ 98 } 99 } 100 ); 101 } 102 103 class Keyboard_input implements KeyListener 104 { 105 public void keyPressed(KeyEvent event) 106 { 107 108 /* int KeyCode = event.getKeyCode(); 109 110 ptime = System.currentTimeMillis(); 111 if(KeyCode==35){ 112 System.out.println("-----------------------------result-----------------------------"); 113 for(int i=65;i<=90;i++){ 114 System.out.println("[" + i + "]:" + avTime[i]); 115 } 116 System.exit(0); 117 } 118 119 */} 120 public void keyTyped(KeyEvent event) 121 { 122 //何もしない 123 } 124 125 public void keyReleased(KeyEvent event) 126 { 127 128 userstr = textField.getText(); 129 /*System.out.println(userstr); 130 int length=0; 131 length=userstr.length(); 132 System.out.println(length); 133 if(length >= 2){ 134 String firstkeystr = userstr.substring(length-2); 135 String secondkeystr = userstr.substring(length-1); 136 firstkey = Integer.parseInt(firstkeystr); 137 secondkey = Integer.parseInt(secondkeystr); 138 139 System.out.println("firstkey="+firstkey); 140 System.out.println("secondkey="+secondkey); 141 142 } 143 } 144 */} 145 146} 147

TextFieldにキーを入力するとそのキーを離したときに入力したキーとその前に入力されたキーのkeycodeを取得したいのですが、eclipseで記述時には実行はされるのですが、実際にTextFieldに入力すると
userstr = textField.getText();の部分でException in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionエラーを吐かれてしまいます。
原因はなんなのでしょうか?
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

質問者さんへアドバイスした方がよいと思える点があります。おそらくTypingSample2のフィールド

public TextComponent textField;

は、内部クラスKeyboard_inputを定義した際にコンパイルエラーになったからとりあえず定義したとか、そんな感じではないですか? メソッドの中からフィールドや変数を参照する際にそれがどの変数・フィールドを指すのか曖昧なままコーディングされているように見受けられます。

問題のコードについてはkeyRelasedメソッドの中で参照しているフィールドに値を設定する処理がありません。というより、initializeメソッドの中で(B)はローカル変数textFieldを宣言していてそのローカル変数はフィールドとは何の関係もない変数だというところがピンときてないのだと思います。このプログラムだと、keyReleasedの中でtextFieldを参照したいならクラスのフィールドとして宣言しておかないといけません。ゆえにJTextFieldのインスタンスをnewで生成した際にそれをローカル変数へ設定するのではなくフィールドに設定するように直せばよいです。

java

1public class TypingSample2 { 2 ... 3 public TextComponent textField; <== (A)フィールドの宣言 4 ... 5 private void initialize() { 6 ... 7 JTextField textField = new JTextField(); <= (B)ローカル変数の宣言とそれへの設定 8 ... 9 } 10 11 class Keyboard_input implements KeyListener { 12 ... 13 @Override public void keyReleased(KeyEvent ev) { 14 textField.getText(); <==このtextFieldは(A)の参照です。 15 } 16 } 17} 18 19===> 修正方法はinitializedメソッドの中身を変更 20 JTextField textField = new JTextField(); <= (B)ローカル変数の宣言とそれへの設定 21 => 22 textFiled = next JTextField(); <= (A)フィールドへの設定

投稿2016/10/18 08:24

編集2016/10/18 08:26
KSwordOfHaste

総合スコア18394

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

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

0

Keyboard_input のなかでtextFieldはNullだからですね

投稿2016/10/18 04:31

shoota

総合スコア246

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

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

退会済みユーザー

退会済みユーザー

2016/10/18 05:34

ご回答ありがとうございます。 textFieldを反映させるにはどのようにすれば良いのでしょうか?
shoota

2016/10/18 05:54

そもそもtextFieldは二つあるし、 public TextComponent textField; JTextField textField = new JTextField(); 「反映」が何を指しているかもわかりませんが、 JTextFieldでKeyEventが発生したときにKeyboard_inputクラスのメソッドが動作できるようになるのであって、JTextFieldの情報がリスナー側に伝わるわけではないですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問