我注意到更新到 Ubuntu 18.04 后 JavaFX 的行为有所不同。我有一个小程序来说明这个问题:
package sample;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Key Pressed");
Group root = new Group();
Scene scene = new Scene(root, 300, 275);
TextField textField = new TextField();
textField.setOnKeyPressed(e -> System.out.println("KeyPressed: " + textField.getText()));
textField.setOnKeyReleased(e -> System.out.println("KeyReleased: " + textField.getText()));
root.getChildren().add(textField);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我编译了这个程序并在 ubuntu 16.04 Oracle java 1.8.0_152、ubuntu 18.04 java 1.8.0_152、ubuntu 18.04 java 1.8.0_192、Windows 10 java 1.8.0_161 上运行,然后在文本字段中输入“abcd”(不带引号)。
当我在 ubuntu 16.04 和 Windows 10 上运行它时,输出是
KeyPressed:
KeyReleased: a
KeyPressed: a
KeyReleased: ab
KeyPressed: ab
KeyReleased: abc
KeyPressed: abc
KeyReleased: abcd
但是当我在 ubuntu 18.04 上运行程序时,输出是
KeyReleased: a
KeyReleased: ab
KeyReleased: abc
KeyReleased: abcd
为什么相同的java程序在不同的操作系统上存在差异(即使是相同版本的jre)?哪个是正确的行为?