2016-12-09 2 views
1

나는 이것을 잠시 동안 알아 내려고 노력했지만 제대로 작동하지는 못합니다. 본질적으로 JavaFX TextArea가 있고 Enter 키를 누른 후 캐럿 위의 행과 같이 입력의 마지막 줄에 CommandWrapper라는 새 Object를 생성하려고합니다.JavaFX TextArea에 String.split()이있는 빈 줄이 포함되어 있습니까?

https://gyazo.com/49ebd82be02fc271eeb7a879b194c63c 다음

이 : 나는 그것을 완벽하게 작동 명령을 입력 한 후 ENTER하지만 아래의 GIF에 표시된에는 명령 재를 입력하지 않으면 어떤 이유로 내 사항 String.split() 함수는 늘 빈 줄을 얻을 명중 할 때마다 이 문제에 관한 코드 :

package com.mswordhf.jnet.java.contollers; 

import java.net.URL; 
import java.util.Arrays; 
import java.util.List; 
import java.util.ResourceBundle; 

import com.mswordhf.jnet.java.models.JnetModel; 
import com.mswordhf.jnet.java.modules.CommandWrapper; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TextArea; 
import javafx.scene.input.KeyCode; 

public class CmdController implements Initializable { 

private JnetModel model; 
private int clientIndex; 

@FXML private TextArea commandTextArea; 

public CmdController(JnetModel model, int clientIndex) { 
    this.model = model; 
    this.clientIndex = clientIndex; 
} 

@Override 
public void initialize(URL url, ResourceBundle rb) { 

    commandTextArea.setOnKeyPressed(keyEvent -> { 

     if(keyEvent.getCode() == KeyCode.ENTER) { 

      List<String> lines = Arrays.asList(commandTextArea.getText().split("\\n")); 
      String command = lines.get(lines.size() - 1); 

      System.out.println(command); 

      if(command == "\n") { 
       System.out.println("Worked"); 
      }else { 
       CommandWrapper wrapper = new CommandWrapper(command); 
       model.getClients().get(clientIndex).getHandle().sendModule(wrapper); 

       if(!model.getCmdOutput.isRunning()) { 
        model.getCmdOutput.reset(); 
        model.getCmdOutput.start(); 
       } 
      } 

     } 

    }); 

    model.getCmdOutput.setOnSucceeded(event -> { 

     for(String line : model.getCmdOutput.getValue()) { 
      commandTextArea.appendText(line + "\n"); 
     } 

     model.clearList(); 

    }); 

} 

} 
+0

'=='원시 ('int','char','double' ...) 평등을 검사하고 객체를 검사하기 위해'.equals (...)'를 사용합니다 ('String','Object ', ...) 평등. 또한 ['String # split'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split (java.lang.String))에는 정규식이 포함되어 있지 않습니다. 문자열은 결과 배열에서와 분리되었습니다. 'if (command.equals ("\\ n"))'가 항상 false가된다는 것을 의미합니다. 아마도 빈 문자열 인'if (command.equals (""))'를 검사해야합니다. –

+0

@JonnyHenly 의견을 주셔서 감사합니다. 그리고 당신 말이 맞아요. 나는 equals()를 사용해야했지만 문제가 남아 있습니다. 필자는 'println (command)'이 항상 Enter 키를 누른 후 캐럿에서 2 행을 인쇄하기 때문에 마지막 빈 행이 'String # split()'에 의해 선택되지 않는다고 생각합니다. –

답변

1

나는 이유에 정말 확실 해요,하지만 사용 :

commandTextArea.setOnKeyReleased(keyevent -> { 
    //code... 
} 

작품 완전히 의도 한대로.

+0

키를 누르는 대신 키를 놓는 것이 원하는 동작을 생성하는 이유가 궁금하지만 작동한다면 * 작동합니다. –

+0

오케이 키 눌림 이벤트는'\ n'이'commandTextArea' 텍스트에 추가되기 전에 시작됩니다. 그것이 내가 생각할 수있는 유일한 이유입니다. 이 일을 계산하는 좋은 직장, +1. –

+0

그래, 그게 내가 어쩔 수없는 것 같아, 도와 줘서 고마워! –

관련 문제