【发布时间】:2023-03-20 14:57:01
【问题描述】:
我正在尝试做一个窗口管理器,我可以在其中创建一个Stage,并且该阶段是我可以拥有的唯一可能的阶段。这个窗口管理器可以识别我是在登录页面还是在注册页面,或者在任何其他 GUI 中。这个窗口管理器是用单例模式完成的(我需要用它来做......)
这是(丑陋的)登录 GUI(尚未完成,它需要数据库连接等...)
public class LoginGUI {
static int winID = 1;
Stage stage;
WindowManagerGUI winInstance;
public int getID() {
return winID;
}
public Scene createScene() {
VBox root = new VBox();
Scene scene = new Scene(root,500,500);
Text title = new Text();
title.setText("Benvenuto in Social Music!");
TextField text1 = new TextField();
PasswordField text2 = new PasswordField();
Button loginBTN = new Button("Accedi");
Button registerBTN = new Button("Registrati");
Button recoverDataBTN = new Button("Recupera Dati");
loginBTN.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent event) {
}
});
registerBTN.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent event) {
try {
WindowManagerGUI.setStage(RegisterGUI.winID);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
recoverDataBTN.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent event) {
}
});
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(title, text1, text2, loginBTN, registerBTN, recoverDataBTN);
return scene;
}
public void displayInterface() {
Stage stage = WindowManagerGUI.getStage();
stage.setScene(createScene());
}
}
这是注册界面
public class RegisterGUI {
Stage stage = WindowManagerGUI.getStage();
WindowManagerGUI winInstance;
static int winID = 2;
Scene scene;
public int getID() {
return winID;
}
public Scene createScene() {
VBox root = new VBox();
this.scene = new Scene(root,500,500);
Button registerBTN = new Button("Registrati");
registerBTN.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent event) {
}
});
root.getChildren().addAll(registerBTN);
scene = new Scene(root,500,500);
return scene;
}
public void displayInterface(Stage stage) {
stage.setScene(createScene());
stage.show();
}
}
这是窗口管理器
public class WindowManagerGUI {
private static WindowManagerGUI winInstance = null;
private static Stage stage = null;
public static WindowManagerGUI getWindowManager() {
if (WindowManagerGUI.winInstance == null)
WindowManagerGUI.winInstance = new WindowManagerGUI();
return winInstance;
}
public static Stage getStage() {
if(WindowManagerGUI.stage == null)
WindowManagerGUI.stage = new Stage();
return stage;
}
public static void setStage(int ID) {
switch(ID) {
case 1:
LoginGUI login = new LoginGUI();
login.displayInterface();
//case 2:
// RegisterGUI register = new RegisterGUI();
// register.displayInterface(stage);
}
}
public static void main(String[] args){
WindowManagerGUI.setStage(1);
WindowManagerGUI.stage.show();
}
}
现在,我在运行时遇到了这个错误。
线程“主”java.lang.ExceptionInInitializerError 中的异常
javafx.stage.Window.(Window.java:1209) 在
javafx.stage.Stage.(Stage.java:239) 在
javafx.stage.Stage.(Stage.java:227) 在
logic.utils.WindowManagerGUI.getStage(WindowManagerGUI.java:23) 在
logic.boundary.LoginGUI.displayInterface(LoginGUI.java:78) 在
logic.utils.WindowManagerGUI.setStage(WindowManagerGUI.java:33) 在
logic.utils.WindowManagerGUI.main(WindowManagerGUI.java:42) 原因:
java.lang.IllegalStateException:此操作在 仅限事件线程; currentThread = main at
com.sun.glass.ui.Application.checkEventThread(Application.java:443) 在 com.sun.glass.ui.Screen.setEventHandler(Screen.java:285) 在
com.sun.javafx.tk.quantum.QuantumToolkit.setScreenConfigurationListener(QuantumToolkit.java:674) 在 javafx.stage.Screen.(Screen.java:79) ... 7 更多
如何解决这个问题?
【问题讨论】:
标签: java user-interface javafx