2016-12-09 4 views
1

私はしばらくこのことを理解しようとしていましたが、うまく動作するようにはできません。基本的に私はJavaFX TextAreaを持っていて、入力の最後の行(つまり、ENTERキーが押された後の上の行の上の行)でCommandWrapperという名前の新しいObjectを作成したいとします。私はそれが完璧に動作しますが、私は以下のGIFに示したいかなるコマンド灰を入力しない場合、何らかの理由で私のstring.Split()関数に文句を言わない空行を取得するコマンドを入力後にEnterを打つたび:JavaFX TextAreaにString.split()で空行が含まれていますか?

https://gyazo.com/49ebd82be02fc271eeb7a879b194c63c

をここにあります問題に関するコード:

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 "))'が常に偽になることを意味します。おそらく、空文字列 'if(command.equals(" "))'をチェックするべきです。 –

+0

@JonnyHenlyコメントをいただきありがとうございます。私はequals()を使用していたはずですが、問題は残ります。私は、 'println(command)'は、Enterを押した後、常にキャレットから2行目を印刷するので、最後の空行が 'String#split()'によって選択されていないと考えます。 –

答えて

1

私は理由として、本当に不確かなんだけど、使って:

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

作品は全く意図したとおり。

+0

私はなぜそれを押しているのではなく、キーを放すのかと困惑しています。しかし、それが機能すれば*動作します。 –

+0

たぶん、押されたキーイベントは '\ n'が' commandTextArea'のテキストに追加される前に発生します。それが私が考えることができる唯一の理由です。これを考え出していい仕事、+1。 –

+0

ええ、それは私が大事にしなければならないと思ったものです、私を助けてくれてありがとう! –

関連する問題