0
私のアプリケーションでは、複数の.fxmlファイルがあります。アプリケーションで画面を設定するときには、SetOnCloseRequest()
メソッドも設定します。いくつかの画面では、その方法のコードが別の画面に切り替えるだけです。例:Create Bank
の画面が開いているときに閉じるボタンを押すと、Manage Banks
の画面に戻りたいとします。しかし、閉じるボタンを押すと、画面が正しく切り替わるようですが、何らかの理由でManage Banks
画面を閉じた直後に、アプリケーションの実行が停止します。私はGUIを持っていないので、それ以降は何もできません。 誰かがManage Banks
の画面が閉じないようにする方法を知っていますか?JavaFX SetOnCloseRequest()すべての画面を閉じる
public class ScreensController extends StackPane {
private HashMap<String, Node> screens = new HashMap<>();
private Client client;
private NewTransactionController newTransactionController;
private BankAccountController bankAccountController;
private ManageBanksController manageBanksController;
public Client getClient() {
return this.client;
}
public NewTransactionController getNewTransactionController() {
return this.newTransactionController;
}
public BankAccountController getBankAccountController() {
return this.bankAccountController;
}
public ManageBanksController getManageBanksController() {
return this.manageBanksController;
}
public ScreensController() {
try {
this.client = new Client();
System.out.println("Client: Client created");
} catch (RemoteException e) {
System.out.println("Client: Cannot create Client");
System.out.println("Client: RemoteException: " + e.getMessage());
System.exit(0);
}
}
public void addScreen(String name, Node screen) {
screens.put(name, screen);
}
public void loadScreen(String name, String resource) {
try {
FXMLLoader myLoader = new FXMLLoader(getClass().getResource(resource));
Parent loadScreen = myLoader.load();
IControllers myScreenController = myLoader.getController();
if (myScreenController instanceof NewTransactionController) {
this.newTransactionController = (NewTransactionController) myScreenController;
} else if (myScreenController instanceof BankAccountController) {
this.bankAccountController = (BankAccountController) myScreenController;
} else if (myScreenController instanceof ManageBanksController) {
this.manageBanksController = (ManageBanksController) myScreenController;
}
myScreenController.setScreenParent(this);
addScreen(name, loadScreen);
} catch (Exception e) {
e.printStackTrace();
}
}
public void setScreen(final String name) {
if (screens.get(name) != null) {
if (!getChildren().isEmpty()) {
getChildren().remove(0);
getChildren().add(0, screens.get(name));
ClientMain.setProperties(name);
} else {
//First time start up
getChildren().add(screens.get(name));
ClientMain.setProperties(name);
}
} else {
System.out.println("Screen hasn't been loaded!!!");
}
}
}
YES試してみてください。
はここ
SetOnCloseRequest()
方法と私のメインクラスです:そして、ここで私の
ScreensController
クラスです!ありがとう!今はすべて期待どおりに動作します! – Svenmarim