Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
带有隐藏和显示的JavaFX阶段问题_Java_Javafx_Javafx 8_Fxml - Fatal编程技术网

带有隐藏和显示的JavaFX阶段问题

带有隐藏和显示的JavaFX阶段问题,java,javafx,javafx-8,fxml,Java,Javafx,Javafx 8,Fxml,我正在构建一个应用程序,它会显示一个窗口,询问用户是否要使用两个按钮选项挂起计算机,其中一个按钮选项为“是”,电脑挂起 另一个名为“稍后”的按钮应该隐藏窗口,一个小时后它再次出现并提出相同的问题 “后来的巴特顿”的代码 您在代码中看到的布尔值是bc,这是我认为我可以控制它的方式,相信我,我尝试了不同的方式,但没有人帮我解决这个问题,下面是GUI类的代码 public class Gui extends Application { public Stage classStage = new S

我正在构建一个应用程序,它会显示一个窗口,询问用户是否要使用两个按钮选项挂起计算机,其中一个按钮选项为“是”,电脑挂起

另一个名为“稍后”的按钮应该隐藏窗口,一个小时后它再次出现并提出相同的问题

“后来的巴特顿”的代码

您在代码中看到的布尔值是bc,这是我认为我可以控制它的方式,相信我,我尝试了不同的方式,但没有人帮我解决这个问题,下面是GUI类的代码

public class Gui extends Application {

public  Stage classStage = new Stage();

public static boolean Done=true;

public static boolean flag=true;


public Gui() {


}

@Override
public void start(Stage primaryStage) throws Exception {

    Done = Controller.isDone();
    classStage = primaryStage;


    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    primaryStage.setX(primaryScreenBounds.getMaxX() - primaryScreenBounds.getWidth());
    primaryStage.setY(primaryScreenBounds.getMaxY() - primaryScreenBounds.getHeight());
    primaryStage.setAlwaysOnTop(true);
    Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
    primaryStage.setTitle("Alerta suspencion de equipo");
    primaryStage.setScene(new Scene(root));
    primaryStage.setResizable(false);
    primaryStage.initStyle(StageStyle.UNDECORATED);

    if (Controller.isDone() == true) {
        primaryStage.show();

    } else if(Controller.isDone() == false) {
        primaryStage.hide();
         Platform.exit(); // this is the only way that the windows close 


    }
}
我知道那个站台;杀死程序,但我只使用.hide();在舞台上什么都没有发生,窗口从来没有关闭过,最糟糕的是当我使用Platform.exit()命令时,我无法使画面再次出现

有人知道一种在特定时间后更容易隐藏和显示窗口的方法吗?也许我做错了


问候

您的问题中的代码中到底发生了什么还不是很清楚。底线是,您不应该自己创建
应用程序的实例;唯一的
应用程序
实例应该是为您创建的实例

实际上,我并不认为有必要为您所展示的功能创建一个单独的类(当然,您可以这样做)。如果按下“否”按钮,您只需隐藏
classStage
,然后在一小时后再次打开它:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> showUI(classStage));
    oneHourPause.play();
}); 

// ...

private void showUI(Stage stage) {

    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    stage.setX(primaryScreenBounds.getMaxX() - primaryScreenBounds.getWidth());
    stage.setY(primaryScreenBounds.getMaxY() - primaryScreenBounds.getHeight());
    stage.setAlwaysOnTop(true);
    Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
    stage.setTitle("Alerta suspencion de equipo");
    stage.setScene(new Scene(root));
    stage.setResizable(false);
    stage.initStyle(StageStyle.UNDECORATED);
    stage.show();
}
请注意,默认情况下,如果最后一个窗口关闭,FX应用程序将退出。因此,您应该调用
Platform.setImplicitExit(false)init()
start()
方法中

我假设您正在重新加载FXML文件,因为用户界面自上次加载以来可能已更改。显然,如果不是这样的话,你所要做的就是重新展示舞台:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> classStage.show());
    oneHourPause.play();
}); 

你的问题中的代码中到底发生了什么还不是很清楚。底线是,您不应该自己创建
应用程序的实例;唯一的
应用程序
实例应该是为您创建的实例

实际上,我并不认为有必要为您所展示的功能创建一个单独的类(当然,您可以这样做)。如果按下“否”按钮,您只需隐藏
classStage
,然后在一小时后再次打开它:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> showUI(classStage));
    oneHourPause.play();
}); 

// ...

private void showUI(Stage stage) {

    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    stage.setX(primaryScreenBounds.getMaxX() - primaryScreenBounds.getWidth());
    stage.setY(primaryScreenBounds.getMaxY() - primaryScreenBounds.getHeight());
    stage.setAlwaysOnTop(true);
    Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
    stage.setTitle("Alerta suspencion de equipo");
    stage.setScene(new Scene(root));
    stage.setResizable(false);
    stage.initStyle(StageStyle.UNDECORATED);
    stage.show();
}
请注意,默认情况下,如果最后一个窗口关闭,FX应用程序将退出。因此,您应该调用
Platform.setImplicitExit(false)init()
start()
方法中

我假设您正在重新加载FXML文件,因为用户界面自上次加载以来可能已更改。显然,如果不是这样的话,你所要做的就是重新展示舞台:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> classStage.show());
    oneHourPause.play();
}); 

您可以使用
线程
暂停转换
。建议使用第二种方法。为什么要实例化
应用程序
子类?假设您已经有了另一个
应用程序
子类,因为您的JavaFX应用程序已经在运行。JavaFX程序中应该只有一个
应用程序
实例,它应该是启动FX应用程序时为您创建的实例。不清楚为什么
classStage.hide()
不起作用:这与您发布的代码无关。创建一个复制问题和您的问题以将其包括在内的列表。您应该能够用几十行代码编写一个完整的示例,其中包含您所描述的功能(两个按钮等),这对于这里的一个问题来说是在可接受的范围内的。好的,我会这样做的,给我一分钟时间@James_Dy您可以使用
线程
暂停转换
。建议使用第二种方法。为什么要实例化
应用程序
子类?假设您已经有了另一个
应用程序
子类,因为您的JavaFX应用程序已经在运行。JavaFX程序中应该只有一个
应用程序
实例,它应该是启动FX应用程序时为您创建的实例。不清楚为什么
classStage.hide()
不起作用:这与您发布的代码无关。创建一个复制问题和您的问题以将其包括在内的列表。您应该能够用几十行代码编写一个完整的示例,其中包含您所描述的功能(两个按钮等),这对于这里的一个问题来说是在可接受的范围内的。好的,我会这样做的,给我一分钟时间@James_dac实际上最大的问题之一是classStage.hide方法不起作用,stage永远不会隐藏。@ChristopherRangel那么代码中还有其他错误,本质上与您发布的所有内容不同。实际上最大的问题之一是classStage.hide方法不起作用,舞台永远不会隐藏。@christopherlangel那么你的代码中还有其他错误,本质上与你发布的所有内容是分离的。