前提・実現したいこと
JavaFXを使ってGUIを作成しています。
そこで、keyPressedを使ってキーイベントを取得して、TextFieldに表示させようとしています。
発生している問題
そこで、キー入力をするとGUIの方はフリーズし、以下に示したように
となり、例外のNullPointerExceptionが発生していることは分かるのですが、何故その例外が発生しているのかが分からないです。
教えてほしいことは、
・ 何故その例外が発生するのか
・ どうしたら正常に動かすことができるか
・ (コードで改善すべき箇所)
です。
質問初心者ですので、不足している情報があれば是非指摘下さい。
よろしくお願いします。
該当のソースコード
Main.java
Java
1package application; 2 3import javafx.application.Application; 4import javafx.fxml.FXMLLoader; 5import javafx.scene.Scene; 6import javafx.scene.input.KeyEvent; 7import javafx.scene.layout.AnchorPane; 8import javafx.stage.Stage; 9 10 11public class Main extends Application { 12 @Override 13 public void start(Stage primaryStage) { 14 try { 15 AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("bbb.fxml")); 16 Scene scene = new Scene(root,400,400); 17 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 18 primaryStage.setScene(scene); 19 primaryStage.show(); 20 scene.setOnKeyPressed(this::keyPressed); 21 } catch(Exception e) { 22 e.printStackTrace(); 23 } 24 } 25 26 public static void main(String[] args) { 27 launch(args); 28 } 29 30 private static String fulltext = ""; 31 32 private void keyPressed(KeyEvent e) { 33 switch(e.getCode()) { 34 case A: fulltext += "a"; 35 break; 36 case ACCEPT: 37 break; 38 case ADD: 39 break; 40 case AGAIN: 41 break; 42 case ALL_CANDIDATES: 43 break; 44 case ALPHANUMERIC: 45 break; 46 case ALT: 47 break; 48 case ALT_GRAPH: 49 break; 50 case AMPERSAND: 51 break; 52 case ASTERISK: 53 break; 54 case AT: 55 break; 56 case B: fulltext += "b"; 57 break; 58 case BACK_QUOTE: 59 break; 60 case BACK_SLASH: 61 break; 62 case BACK_SPACE: 63 if(fulltext != null && fulltext.length() > 0) { 64 fulltext = fulltext.substring(0, fulltext.length() - 1); 65 } 66 break; 67 case BEGIN: 68 break; 69 case BRACELEFT: 70 break; 71 case BRACERIGHT: 72 break; 73 case C: fulltext += "c"; 74 break; 75 case CANCEL: 76 break; 77 case CAPS: 78 break; 79 case CHANNEL_DOWN: 80 break; 81 case CHANNEL_UP: 82 break; 83 case CIRCUMFLEX: 84 break; 85 case CLEAR: 86 break; 87 case CLOSE_BRACKET: 88 break; 89 case CODE_INPUT: 90 break; 91 case COLON: 92 break; 93 case COLORED_KEY_0: 94 break; 95 case COLORED_KEY_1: 96 break; 97 case COLORED_KEY_2: 98 break; 99 case COLORED_KEY_3: 100 break; 101 case COMMA: 102 break; 103 case COMMAND: 104 break; 105 case COMPOSE: 106 break; 107 case CONTEXT_MENU: 108 break; 109 case CONTROL: 110 break; 111 case CONVERT: 112 break; 113 case COPY: 114 break; 115 case CUT: 116 break; 117 case D: fulltext += "d"; 118 break; 119 case DEAD_ABOVEDOT: 120 break; 121 case DEAD_ABOVERING: 122 break; 123 case DEAD_ACUTE: 124 break; 125 case DEAD_BREVE: 126 break; 127 case DEAD_CARON: 128 break; 129 case DEAD_CEDILLA: 130 break; 131 case DEAD_CIRCUMFLEX: 132 break; 133 case DEAD_DIAERESIS: 134 break; 135 case DEAD_DOUBLEACUTE: 136 break; 137 case DEAD_GRAVE: 138 break; 139 case DEAD_IOTA: 140 break; 141 case DEAD_MACRON: 142 break; 143 case DEAD_OGONEK: 144 break; 145 case DEAD_SEMIVOICED_SOUND: 146 break; 147 case DEAD_TILDE: 148 break; 149 case DEAD_VOICED_SOUND: 150 break; 151 case DECIMAL: 152 break; 153 case DELETE: 154 break; 155 case DIGIT0: 156 break; 157 case DIGIT1: 158 break; 159 case DIGIT2: 160 break; 161 case DIGIT3: 162 break; 163 case DIGIT4: 164 break; 165 case DIGIT5: 166 break; 167 case DIGIT6: 168 break; 169 case DIGIT7: 170 break; 171 case DIGIT8: 172 break; 173 case DIGIT9: 174 break; 175 case DIVIDE: 176 break; 177 case DOLLAR: 178 break; 179 case DOWN: 180 break; 181 case E: fulltext += "e"; 182 break; 183 case EJECT_TOGGLE: 184 break; 185 case END: 186 break; 187 case ENTER: 188 break; 189 case EQUALS: 190 break; 191 case ESCAPE: 192 break; 193 case EURO_SIGN: 194 break; 195 case EXCLAMATION_MARK: 196 break; 197 case F: fulltext += "f"; 198 break; 199 case F1: 200 break; 201 case F10: 202 break; 203 case F11: 204 break; 205 case F12: 206 break; 207 case F13: 208 break; 209 case F14: 210 break; 211 case F15: 212 break; 213 case F16: 214 break; 215 case F17: 216 break; 217 case F18: 218 break; 219 case F19: 220 break; 221 case F2: 222 break; 223 case F20: 224 break; 225 case F21: 226 break; 227 case F22: 228 break; 229 case F23: 230 break; 231 case F24: 232 break; 233 case F3: 234 break; 235 case F4: 236 break; 237 case F5: 238 break; 239 case F6: 240 break; 241 case F7: 242 break; 243 case F8: 244 break; 245 case F9: 246 break; 247 case FAST_FWD: 248 break; 249 case FINAL: 250 break; 251 case FIND: 252 break; 253 case FULL_WIDTH: 254 break; 255 case G: fulltext += "g"; 256 break; 257 case GAME_A: 258 break; 259 case GAME_B: 260 break; 261 case GAME_C: 262 break; 263 case GAME_D: 264 break; 265 case GREATER: 266 break; 267 case H: fulltext += "h"; 268 break; 269 case HALF_WIDTH: 270 break; 271 case HELP: 272 break; 273 case HIRAGANA: 274 break; 275 case HOME: 276 break; 277 case I: fulltext += "i"; 278 break; 279 case INFO: 280 break; 281 case INPUT_METHOD_ON_OFF: 282 break; 283 case INSERT: 284 break; 285 case INVERTED_EXCLAMATION_MARK: 286 break; 287 case J: fulltext += "j"; 288 break; 289 case JAPANESE_HIRAGANA: 290 break; 291 case JAPANESE_KATAKANA: 292 break; 293 case JAPANESE_ROMAN: 294 break; 295 case K: fulltext += "k"; 296 break; 297 case KANA: 298 break; 299 case KANA_LOCK: 300 break; 301 case KANJI: 302 break; 303 case KATAKANA: 304 break; 305 case KP_DOWN: 306 break; 307 case KP_LEFT: 308 break; 309 case KP_RIGHT: 310 break; 311 case KP_UP: 312 break; 313 case L: fulltext += "l"; 314 break; 315 case LEFT: 316 break; 317 case LEFT_PARENTHESIS: 318 break; 319 case LESS: 320 break; 321 case M: fulltext += "m"; 322 break; 323 case META: 324 break; 325 case MINUS: 326 break; 327 case MODECHANGE: 328 break; 329 case MULTIPLY: 330 break; 331 case MUTE: 332 break; 333 case N: fulltext += "n"; 334 break; 335 case NONCONVERT: 336 break; 337 case NUMBER_SIGN: 338 break; 339 case NUMPAD0: 340 break; 341 case NUMPAD1: 342 break; 343 case NUMPAD2: 344 break; 345 case NUMPAD3: 346 break; 347 case NUMPAD4: 348 break; 349 case NUMPAD5: 350 break; 351 case NUMPAD6: 352 break; 353 case NUMPAD7: 354 break; 355 case NUMPAD8: 356 break; 357 case NUMPAD9: 358 break; 359 case NUM_LOCK: 360 break; 361 case O: fulltext += "o"; 362 break; 363 case OPEN_BRACKET: 364 break; 365 case P: fulltext += "p"; 366 break; 367 case PAGE_DOWN: 368 break; 369 case PAGE_UP: 370 break; 371 case PASTE: 372 break; 373 case PAUSE: 374 break; 375 case PERIOD: 376 break; 377 case PLAY: 378 break; 379 case PLUS: 380 break; 381 case POUND: 382 break; 383 case POWER: 384 break; 385 case PREVIOUS_CANDIDATE: 386 break; 387 case PRINTSCREEN: 388 break; 389 case PROPS: 390 break; 391 case Q: fulltext += "q"; 392 break; 393 case QUOTE: 394 break; 395 case QUOTEDBL: 396 break; 397 case R: fulltext += "r"; 398 break; 399 case RECORD: 400 break; 401 case REWIND: 402 break; 403 case RIGHT: 404 break; 405 case RIGHT_PARENTHESIS: 406 break; 407 case ROMAN_CHARACTERS: 408 break; 409 case S: fulltext += "s"; 410 break; 411 case SCROLL_LOCK: 412 break; 413 case SEMICOLON: 414 break; 415 case SEPARATOR: 416 break; 417 case SHIFT: 418 break; 419 case SHORTCUT: 420 break; 421 case SLASH: 422 break; 423 case SOFTKEY_0: 424 break; 425 case SOFTKEY_1: 426 break; 427 case SOFTKEY_2: 428 break; 429 case SOFTKEY_3: 430 break; 431 case SOFTKEY_4: 432 break; 433 case SOFTKEY_5: 434 break; 435 case SOFTKEY_6: 436 break; 437 case SOFTKEY_7: 438 break; 439 case SOFTKEY_8: 440 break; 441 case SOFTKEY_9: 442 break; 443 case SPACE: 444 break; 445 case STAR: 446 break; 447 case STOP: 448 break; 449 case SUBTRACT: 450 break; 451 case T: fulltext += "t"; 452 break; 453 case TAB: 454 break; 455 case TRACK_NEXT: 456 break; 457 case TRACK_PREV: 458 break; 459 case U: fulltext += "u"; 460 break; 461 case UNDEFINED: 462 break; 463 case UNDERSCORE: 464 break; 465 case UNDO: 466 break; 467 case UP: 468 break; 469 case V: fulltext += "v"; 470 break; 471 case VOLUME_DOWN: 472 break; 473 case VOLUME_UP: 474 break; 475 case W: fulltext += "w"; 476 break; 477 case WINDOWS: 478 break; 479 case X: fulltext += "x"; 480 break; 481 case Y: fulltext += "y"; 482 break; 483 case Z: fulltext += "z"; 484 break; 485 default: 486 break; 487 } 488 if(fulltext != null) bbb.textField.setText(fulltext); 489 System.out.println(fulltext); 490 } 491 492} 493
bbb.java
package application; import java.net.URL; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.TextField; public class bbb implements Initializable{ @Override public void initialize(URL location, ResourceBundle resources){ } @FXML private static TextField textField; }
bbb.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.bbb"> <children> <TextField fx:id="textField" disable="true" editable="false" layoutX="126.0" layoutY="188.0" /> </children> </AnchorPane>
試したこと
Main.javaで下から6行目の前にif(fulltext != null)を追加しfulltextがnullではないか調べたが、それでも例外が出る。
補足情報(FW/ツールのバージョンなど)
Java 10.0.2
JavaSE 10.0.2
Eclipse 4.7(Oxygen)
JavaFX Scene Builder 2.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/09 22:34
2018/08/10 03:32