Java FX问题窗口管理器(单例)
我正在尝试做一个窗口管理器,在其中我可以创建一个Java FX问题窗口管理器(单例),java,user-interface,javafx,Java,User Interface,Javafx,我正在尝试做一个窗口管理器,在其中我可以创建一个阶段,这个阶段是我唯一可能拥有的阶段。这个窗口管理器可以识别我是否在登录页面、注册页面或任何其他GUI中。这个窗口管理器是使用单例模式完成的(我需要使用它…) 这是(丑陋的)登录GUI(尚未完成,需要DB连接等) 公共类登录{ 静态int-winID=1; 阶段性; WindowManagerGUI winInstance; 公共int getID(){ 返回winID; } 公共场景createScene(){ VBox root=新的VBox(
阶段
,这个阶段是我唯一可能拥有的阶段。这个窗口管理器可以识别我是否在登录页面、注册页面或任何其他GUI中。这个窗口管理器是使用单例模式完成的(我需要使用它…)
这是(丑陋的)登录GUI(尚未完成,需要DB连接等)
公共类登录{
静态int-winID=1;
阶段性;
WindowManagerGUI winInstance;
公共int getID(){
返回winID;
}
公共场景createScene(){
VBox root=新的VBox();
场景=新场景(根,500500);
文本标题=新文本();
title.setText(“社交音乐中的Benvenuto!”);
TextField text1=新的TextField();
PasswordField text2=新的PasswordField();
按钮登录TN=新按钮(“Accedi”);
按钮注册器BN=新按钮(“注册”);
按钮recoverDataBTN=新按钮(“Recurpera Dati”);
loginBTN.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
}
});
registerBTN.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
试一试{
WindowManagerGUI.setStage(RegisterGUI.winID);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
});
recoverDataBTN.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
}
});
根部设置对齐(位置中心);
root.getChildren().addAll(title、text1、text2、loginBTN、registerBTN、recoverDataBTN);
返回场景;
}
公共接口(){
Stage Stage=WindowManagerGUI.getStage();
stage.setScene(createScene());
}
}
这是注册GUI
公共类注册表GUI{
Stage Stage=WindowManagerGUI.getStage();
WindowManagerGUI winInstance;
静态int-winID=2;
场景;
公共int getID(){
返回winID;
}
公共场景createScene(){
VBox root=新的VBox();
this.scene=新场景(根,500500);
按钮注册器BN=新按钮(“注册”);
registerBTN.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
}
});
root.getChildren().addAll(registerBTN);
场景=新场景(根,500500);
返回场景;
}
公共void显示界面(Stage){
stage.setScene(createScene());
stage.show();
}
}
这是窗口管理器
公共类WindowManagerGUI{
私有静态WindowManagerGUI winInstance=null;
私有静态阶段=空;
公共静态WindowManager GUI getWindowManager(){
if(WindowManagerGUI.winInstance==null)
WindowManagerGUI.winInstance=新的WindowManagerGUI();
返回winInstance;
}
公共静态阶段getStage(){
if(WindowManagerGUI.stage==null)
WindowManagerGUI.stage=新阶段();
返回阶段;
}
公共静态无效设置阶段(int ID){
开关(ID){
案例1:
LoginGUI login=新建LoginGUI();
login.displayInterface();
//案例2:
//RegisterGUI register=新的RegisterGUI();
//寄存器。显示接口(阶段);
}
}
公共静态void main(字符串[]args){
WindowManagerGUI.setStage(1);
WindowManagerGUI.stage.show();
}
}
现在,我运行这个时出现了这个错误
线程“main”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.setScreenConconfigurationListener(QuantumToolkit.java:674) 在javafx.stage.Screen.(Screen.java:79)。。。还有7个
如何解决这个问题 在
WindowManagerGUI.getStage()静态方法中,您正在实例化一个新的Stage
对象。您正在从主线程调用此方法,但是如果在JavaFX应用程序线程之外的任何其他线程中实例化了Stage
对象,您将收到API文档()中所述的IllegalStateException
在浏览一些在线教程(此处:,此处:)时,似乎需要创建一个类来扩展Application
并重写start(Stage)
方法,以便在JavaFX应用程序线程上执行
我希望这有帮助 或者使用Platform.startup
,这会使关闭工具箱变得更加复杂…请阅读