子类化JavaFX应用程序

时间:2015-01-28 23:18:57

标签: java inheritance javafx-8

这个问题是我发布的问题How do you call a subclass method from a superclass in Java?的后续问题。好吧,我得到了答案,但我的SuperClass是一个extends Application的JavaFX应用程序,每当我尝试使用抽象类作为我的应用程序类时,我在构造函数中得到以下错误:java.lang.reflect.InvocationTargetException。即使应用程序类不是抽象的,如果我尝试调用new SubClass().create("title");,我也会收到该错误。我想要实现的是在按下回车键时调用SubClass中的方法exec(String command)。这是我目前的SuperClass代码:

public abstract class Console extends Application {
private String title;
private static Text output = new Text();


public void create(String title) {
    this.title = title;
    launch();
}

public void start(Stage stage) {
    stage.setOnCloseRequest((WindowEvent event) -> {
        System.exit(0);
    });
    stage.setTitle(title);
    stage.setResizable(false);
    Group root = new Group();
    Scene scene = new Scene(root, 800, 400);
    stage.setScene(scene);
    ScrollPane scroll = new ScrollPane();
    scroll.setContent(output);
    scroll.setMaxWidth(800);
    scroll.setMaxHeight(360);
    TextField input = new TextField();
    input.setLayoutX(0);
    input.setLayoutY(380);
    input.setPrefWidth(800);
    scene.setOnKeyPressed((KeyEvent event) -> {
        if(event.getCode() == KeyCode.ENTER) {
            exec(input.getText());
            input.clear();
        }
    });
    root.getChildren().add(scroll);
    root.getChildren().add(input);
    stage.show();
}
public static void appendOutput(String value) {
    Platform.runLater(() -> {
        output.setText(output.getText() + "\n" + value);
    });
}
protected abstract void exec(String command);
}

1 个答案:

答案 0 :(得分:2)

不要创建SubClass的新实例,而是尝试调用静态方法SubClass.launch(args) JavaFX将自己创建新的SubClass实例。