JavaFxで単純なMVCアプリケーションを構築しようとしています。ボタンbを押すと、左のTextField(tf1)の値をとり、右のテキストフィールド(tf2)にコピーします。したがって、ボタンbをクリックしたときに何をすべきかを定義すると、eclipseにエラーは表示されませんが、ボタンを返す代わりにプログラムを実行すると、NullpointerExceptionがスローされます。JavaFx MVC GetterがNullPointerExceptionをスローする
私は何が間違っているのか考えていますか?
ありがとうございます!
Model.java:
package mvc;
public class Model {
private String firsttext;
private String lasttext;
public String getFirsttext() {
return firsttext;
}
public void setFirsttext(String firsttext) {
this.firsttext = firsttext;
}
public String getLasttext() {
return lasttext;
}
public void setLasttext(String lasttext) {
this.lasttext = lasttext;
}
}
View.java:
package mvc;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class View extends Application {
private TextField tf1;
private TextField tf2;
private Button b;
@Override
public void start(Stage stage) {
tf1 = new TextField();
tf2 = new TextField();
b = new Button("Copy");
FlowPane fp = new FlowPane();
fp.getChildren().addAll(tf1, b, tf2);
Scene scene = new Scene(fp, 600, 200);
stage.setScene(scene);
stage.show();
}
public void init(String args[]) {
launch(args);
}
public TextField getTf1() {
return tf1;
}
public void setTf1(TextField tf1) {
this.tf1 = tf1;
}
public TextField getTf2() {
return tf2;
}
public void setTf2(TextField tf2) {
this.tf2 = tf2;
}
public Button getB() {
return b;
}
public void setB(Button b) {
this.b = b;
}
}
Controller.java:
package mvc;
public class Controller {
private View view;
private Model model;
public Controller(View v, Model m) {
view = v;
model = m;
}
public void initController() {
view.getB().setOnAction(evt -> {
model.setFirsttext(view.getTf1().getText());
model.setLasttext(model.getFirsttext());
view.getTf2().setText(model.getLasttext());
});
}
}
App.java:
package mvc;
public class App {
public static void main(String[] args) {
Model m = new Model();
View v = new View();
Controller c = new Controller(v, m);
v.init(args);
c.initController();
}
}
嘆願ここにスタックトレースを追加する –
[この質問](https://stackoverflow.com/questions/33303167/javafx-can-application-class-be-the-controller-class)を見てください - それはまったく同じではありませんしかし答えは、 'Application'クラスの意図した使い方を説明しています。 'launch'を呼び出すと新しいインスタンスが作成されるので、あなたが見ているインスタンスはコントローラに渡すインスタンスではありません。 'App'クラスをアプリケーションに拡張し、静的コンテキストからのみ' launch'を呼び出すことが最善です。 – Itai
stacktraceは次のとおりです。スレッドmainの例外java.lang.NullPointerException \t at mvc.Controller.initController(Controller.java:14) \t at mvc.App.main(App.java:9) – ILikeC0ding