我正在构建一个应用程序,该应用程序显示一个窗口,询问用户是否要使用两个按钮选项暂停计算机,其中一个是YES,PC暂停。
另一个名为“Later”的按钮应该隐藏窗口,一小时后它会再次出现并提出相同的问题。
“后来的按钮”的代码
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
private ArrayList GetImagesFromDB(string code)
{
ArrayList images = new ArrayList();
SqlCommand selectImagesCommand = new SqlCommand("SELECT * FROM images WHERE code = '"+code+"'");
selectImagesCommand.Connection = myConnection;
if(myConnection.State == ConnectionState.Closed){
myConnection.Open();
}
SqlDataReader imagesReader = selectImagesCommand.ExecuteReader();
while (imagesReader.Read())
{
byte[] newimagebytesRecord = (byte[])imagesReader["image"];
images.Add(byteArrayToImage(newimagebytesRecord));
}
return images;
}
你在代码中看到的布尔值是bc,这是我认为我可以控制的方式,相信我,我尝试过不同的方式,但没有人只是帮助我解决这个问题,这里是GUI类的代码< / p>
noButton.setOnAction(event -> {
Done=false; //boolean to close and open the frame
Gui gui = new Gui();
try {
gui.start(classStage);
} catch (Exception e) {
e.printStackTrace();
}
});
我知道Platform.exit();杀死程序,但当我只使用.hide();没有发生任何事情,窗口永远不会关闭,最糟糕的是,当我使用Platform.exit()命令时,我不能让框架再次出现......
任何人都知道一种方式可能更容易隐藏并在一定时间后显示窗口?也许我这样做错了。
的问候。
答案 0 :(得分:2)
您的问题代码中发生了什么并不是很清楚。底线是你永远不应该自己创建tvTitle = (TextView) findViewById(R.id.title);
的实例;唯一的Application
实例应该是为您创建的实例。
我实际上并不需要为您已经展示的功能设置单独的课程(当然,您可以这样做)。如果按下否按钮,您只需隐藏Application
,然后在一小时内再次打开它:
classStage
请注意,默认情况下,如果最后一个窗口关闭,FX应用程序将退出。因此,您应该使用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();
}
或Platform.setImplicitExit(false);
方法拨打init()
。
我假设您正在重新加载FXML文件,因为UI可能已经更改,因为它之前已加载。显然,如果情况并非如此,你所要做的就是再次展示舞台:
start()