Javaで各アルファベットの毎のキー入力の時間の平均(押してから離すまで)を計測するアプリケーションをeclipseとSWINGデザイナーで作成しています。
TextFieldに文字を打ち込んでもらい、endキーを押すとそれまでの各キーの平均打鍵計測時間が表示される仕組みです。
半角のアルファベット入力での計測は問題なく出来たのですがカタカナ・ひらがな
ローマ字キーや半角/全角漢字キーを用いて日本語入力を行おうとすると下記のエラーが出てきてしまい計測秒数も明らかに巨大な数字が出てきてしまいます。
日本語入力でも問題なく計測したいのですがどのようにすればよろしいでしょうか?
ご回答お待ちしております。
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; 10import java.util.Random; 11 12import javax.swing.JFrame; 13import javax.swing.JLabel; 14import javax.swing.JTextField; 15 16public class TypingSample { 17 18 private JFrame frmTypesample; 19 long ptime; 20 long rtime; 21 long[] time = new long[99]; 22 long[] c = new long [99]; 23 String userstr; 24 public TextComponent textField; 25 /** 26 * Launch the application. 27 */ 28 public static void main(String[] args) { 29 EventQueue.invokeLater(new Runnable() { 30 public void run() { 31 try { 32 TypingSample window = new TypingSample(); 33 window.frmTypesample.setVisible(true); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 }); 39 } 40 41 /** 42 * Create the application. 43 */ 44 public TypingSample() { 45 initialize(); 46 } 47 48 /** 49 * Initialize the contents of the frame. 50 */ 51 52 private void initialize() { 53 frmTypesample = new JFrame(); 54 frmTypesample.setTitle("TypingSample"); 55 frmTypesample.setBounds(100, 100, 567, 657); 56 frmTypesample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 57 frmTypesample.getContentPane().setLayout(null); 58 59 JLabel Label2 = new JLabel(); 60 Label2.setFont(new Font("MS UI Gothic", Font.PLAIN,40)); 61 Label2.setBounds(90, 504, 376, 33); 62 frmTypesample.getContentPane().add(Label2); 63 64 JTextField textField = new JTextField(); 65 textField.setFont(new Font("MS ゴシック", Font.PLAIN, 40)); 66 textField.setBounds(27, 291, 483, 203); 67 frmTypesample.getContentPane().add(textField); 68 textField.addKeyListener(new Keyboard_input()); 69 70 71 textField.addActionListener( 72 new ActionListener(){ 73 public void actionPerformed(ActionEvent e){ 74 Label2.setText(""); 75 userstr = textField.getText(); 76 Label2.setText(userstr); 77 textField.setText(""); 78 /* 処理したい内容をここに記述する */ 79 } 80 } 81 ); 82 83 84 85 86 } 87 88 class Keyboard_input implements KeyListener 89 { 90 public void keyPressed(KeyEvent event) 91 { 92 int KeyCode = event.getKeyCode(); 93 ptime = System.currentTimeMillis(); 94 if(KeyCode==35){ 95 for(int i=65;i<=90;i++){ 96 System.out.println(i + ":" + time[i]); 97 } 98 } 99 100 } 101 102 103 public void keyReleased(KeyEvent event) 104 { 105 rtime = System.currentTimeMillis() - ptime; 106 int KeyCode = event.getKeyCode(); 107 108 c[KeyCode]++; 109 110 time[KeyCode] =(time[KeyCode]+rtime) / c[KeyCode]; 111 System.out.println("[" + KeyCode + "」Released. Time:"+ rtime); 112 System.out.println("AVTime:"+time[KeyCode]); 113 } 114 115 116 public void keyTyped(KeyEvent event) 117 { 118 } 119 } 120 121 } 122` 123 124###発生している問題・エラーメッセージ 125Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 240 126 at pack.TypingSample$Keyboard_input.keyReleased(TypingSample.java:118) 127 at java.awt.Component.processKeyEvent(Component.java:6494) 128 at javax.swing.JComponent.processKeyEvent(JComponent.java:2832) 129 at java.awt.Component.processEvent(Component.java:6310) 130 at java.awt.Container.processEvent(Container.java:2236) 131 at java.awt.Component.dispatchEventImpl(Component.java:4889) 132 at java.awt.Container.dispatchEventImpl(Container.java:2294) 133 at java.awt.Component.dispatchEvent(Component.java:4711) 134 at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) 135 at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806) 136 at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074) 137 at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945) 138 at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771) 139 at java.awt.Component.dispatchEventImpl(Component.java:4760) 140 at java.awt.Container.dispatchEventImpl(Container.java:2294) 141 at java.awt.Window.dispatchEventImpl(Window.java:2746) 142 at java.awt.Component.dispatchEvent(Component.java:4711) 143 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 144 at java.awt.EventQueue.access$500(EventQueue.java:97) 145 at java.awt.EventQueue$3.run(EventQueue.java:709) 146 at java.awt.EventQueue$3.run(EventQueue.java:703) 147 at java.security.AccessController.doPrivileged(Native Method) 148 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 149 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 150 at java.awt.EventQueue$4.run(EventQueue.java:731) 151 at java.awt.EventQueue$4.run(EventQueue.java:729) 152 at java.security.AccessController.doPrivileged(Native Method) 153 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 154 at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 155 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 156 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 157 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 158 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 159 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 160 at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 161[65」Released. Time:16127 162AVTime:3235 163[73」Released. Time:16335 164AVTime:2727 165[85」Released. Time:16607 166AVTime:3330 167[69」Released. Time:16847 168AVTime:3376 169[79」Released. Time:17248 170AVTime:3458 171[10」Released. Time:17568 172AVTime:8815 173 174 175
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/09/12 08:37
2016/09/12 08:51
退会済みユーザー
2016/09/12 10:01