2014-12-09 3 views
2

나는 현재 다음과 같은 상황이 :NullPointerException이

내가 내 응용 프로그램이 사용자 입력을들을 만들고 싶어합니다. 첫째, 보이지 않는 TextField로이 작업을 수행했지만이 작업이 내 디자인을 망쳤으며 충분히 정교하지 않다고 생각했습니다. 그래서, 지금과 같이 내 상위 FlowPane에 onKeyPressed 이벤트 핸들러를 만들려고 노력하고 있어요 : 이것은 그냥 일반 텍스트와 숫자를 위해 노력하고 있습니다

public String input = ""; 
@FXML public void listenToInput(KeyEvent key) { 

    if (key.getCode() != KeyCode.ENTER) { 

     if (key.getCode().isDigitKey() || key.getCode().isLetterKey()) { 
      String newChar = key.getText(); 
      input = input.concat(newChar); 
     } 

    } 
    else { 
     this.addScanToList(input); 
     input = ""; 
    } 

} 

.

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException 
at com.sun.javafx.scene.control.behavior.TableViewBehaviorBase.activate(TableViewBehaviorBase.java:915) 
at com.sun.javafx.scene.control.behavior.TableViewBehaviorBase.callAction(TableViewBehaviorBase.java:179) 
at com.sun.javafx.scene.control.behavior.BehaviorBase.callActionForEvent(BehaviorBase.java:218) 
at com.sun.javafx.scene.control.behavior.TableViewBehaviorBase.callActionForEvent(TableViewBehaviorBase.java:208) 
at com.sun.javafx.scene.control.behavior.BehaviorBase.lambda$new$75(BehaviorBase.java:135) 
at com.sun.javafx.scene.control.behavior.BehaviorBase$$Lambda$146/1103773754.handle(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$KeyHandler.process(Scene.java:3926) 
at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3872) 
at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2001) 
at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2463) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:197) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:147) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$346(GlassViewEventHandler.java:228) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$208/996795822.get(Unknown Source) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:406) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:227) 
at com.sun.glass.ui.View.handleKeyEvent(View.java:540) 
at com.sun.glass.ui.View.notifyKey(View.java:950) 

이미 생각 :하지만 최대한 빨리 누르는 나는 다음과 같은 오류 얻을를 입력, 포커스가 없습니다

  • 상단 FlowPane,하지만 나는 그것이 집중했다, 그러나 결과가 없다.
  • 내 listenToInput의 'else'가 입력되지 않기 때문에 enter 키가 인식되지 않습니다. 사실 일 수 있습니다.

편집 1 :

  • FlowPane는 'setOnAction'을 가지고 있지 않기 때문에이 를 눌러 입력 처리하는 방법을 알고하지 않습니다.

이 오류를 유발하는 원인을 아는 사람이 있습니까?

편집 2 : 나는 변경

는 onKeyReleased에 onKeyPressed 한 다음 내 코드가 제대로 실행,하지만 난 여전히 오류가 발생합니다. 어쩌면 그것을 아는 것이 도움이 될 것입니다.

편집 3 :

나는 ALT 대신 을 입력하여 목록에 검색을 추가했는데, 그것은 ENTER를 함께 할 수있는 뭔가가, 그래서 이것은 완벽하게 작동

답변

1

며칠 동안 시도한 후이를 해결할 수있었습니다. 편집 3에서 이미 언급했듯이 ENTER 키와 관련이 있습니다. 눌렀을 때, FXML 파일이 동작을 소비 할 수있는 요소를 찾고있는 것처럼 보였습니다. 여하튼, 그것이 발견 된 첫번째 것은 TableView였다. 이 코드를 포커스를 맞추지 않으려 고 시도했습니다.

tableview.setFocusTraversable(false) 

그리고 작동합니다. 누구든지 ENTER 키를 사용하여 JavaFX가 원하는 것을 설명 할 수 있습니까? FlowPane에 중점을 두었 기 때문에 해당 리스너에게 작업을 보내야합니다. 재정의해야하는 이벤트 처리기와 관련이 있다면 알려 주시기 바랍니다.

0

그래서 보통 키 이벤트를 수신하기 위해 keyEvent 핸들러를 추가합니다.

FlowPane pane = new FlowPane(); 
pane.setOnKeyPressed(new EventHandler<KeyEvent>() { 

    @Override 
    public void handle(KeyEvent key) { 
     if (key.getCode() != KeyCode.ENTER) { 

      if (key.getCode().isDigitKey() || key.getCode().isLetterKey()) { 
       String newChar = key.getText(); 
       input = input.concat(newChar); 
      } 

     } 
     else { 
      this.addScanToList(input); 
      input = ""; 
     } 

    } 
}); 

} 
+0

답변 해 주셔서 감사합니다. FXML 파일에서 액션을 설정 했으므로 기본적으로 제안한 것과 동일하지 않습니까? – bashoogzaad