Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FX问题窗口管理器(单例)_Java_User Interface_Javafx - Fatal编程技术网

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
,这会使关闭工具箱变得更加复杂…请阅读