我希望我的应用程序打开一个用户无法关闭的对话框,但是当他的手机重新连接时它会关闭(他对打开的对话框很耐心)
我目前正在使用Platform.runlater打开警告对话框,如下所示:
phoneConnected.getObservable().addListener(observable -> {
LOG.info("identifyObs " + phoneConnected.getBooleanDataValue().getValue());
if (phoneConnected.getBooleanDataValue() != null && !phoneConnected.getBooleanDataValue().getValue()) {
Platform.runLater(() -> alert.show());
}
if (phoneConnected.getBooleanDataValue().getValue()) {
System.out.println("ok");
alert.close();
Platform.runLater(() -> alert.close());
}
});
事实是,当观察者要去"真实"时,我已经得到了" ok"在控制台中,但对话框没有关闭..
我已经在runLater中试过了runLater,有什么想法吗?
我想说,我已经看到了这一点:Javafx: Close alert box (or, any dialog box) programatically但它无法正常工作..
答案 0 :(得分:2)
如果未设置结果并且没有可用的按钮,则Alert
似乎无法正常关闭。您可以通过分配任意ButtonType
作为结果来解决此问题:
Alert alert = new Alert(Alert.AlertType.NONE, "wait for it");
// set result to allow programmatic closing of alert
alert.setResult(ButtonType.OK);
Button btn = new Button("Start");
btn.setOnAction(evt -> {
btn.setDisable(true);
// make alert appear / disappear
Thread t = new Thread(() -> {
boolean showing = false;
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(NewFXMain2.class.getName()).log(Level.SEVERE, null, ex);
}
Runnable action = showing ? alert::close : alert::show;
Platform.runLater(action);
showing = !showing;
}
});
t.setDaemon(true);
t.start();
});