JavaFX 警报信息不再显示 ContentText 不知道为什么
JavaFX Alert Information not showing ContentText anymore don't know why
我在 Windows 10 上有一个使用 JavaFX 运行 的小应用程序,我在应用程序中更改了很多东西,现在我面临的问题是我的 InfoBox 是显示 header 和图片,但框内没有文字。
我在我的应用程序的一部分中调用它:
infoBox("Karte wurde gelesen... bitte warten ", "Information-NFC", "Information-NFC!");
这里是函数本身:
public void infoBox(String infoMessage, String titleBar, String headerMessage)
{
Alert alert = new Alert(AlertType.INFORMATION);
alert.setResizable(true);
alert.getDialogPane().setPrefSize(480, 320);
alert.getDialogPane().setStyle("-fx-text-fill: red;-fx-font-size: 15px; -fx-font: 10px Tahoma; ");
alert.setTitle(titleBar);
alert.setHeaderText(headerMessage);
alert.setContentText(infoMessage);
System.out.println(infoMessage+"here");
//Logo für Programm Fenster
//////////// Logo ProgrammFesnter end
Image img2 = new Image(getClass().getResourceAsStream("logo.PNG"));
Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
dialogStage.getIcons().add(img2);
alert.show();
try {
Thread.sleep(8000);
} catch (InterruptedException ex) {
System.out.println(ex);
}
alert.close();
}
我可以在日志中看到 window 设置了变量“infoMessage”,但警告框本身是空的。
我不知道为什么。
你们中有人以前遇到过这个问题吗?
一切都很好 运行 除了这个小盒子... ???
感谢大家,祝您假期愉快....
史蒂夫
最有可能的问题是 Thread.sleep(8000)
调用。这会使 JavaFX 应用程序线程 休眠,从而阻止用户与 UI 进行交互,并且还会阻止安排任何渲染“脉冲”。换句话说,您的应用程序在这 8 秒内没有响应。
如果你想延迟 FX 线程上的动作,那么你应该使用动画 API。并且由于您似乎希望在允许代码继续之前等待警报关闭,因此您还应该使用 onShown
属性 和 Dialog
的 showAndWait()
方法。例如:
Alert alert = ...;
// configure alert
PauseTransition closeDelay = new PauseTransition(Duration.seconds(8));
closeDelay.setOnFinished(e -> alert.close());
alert.setOnShown(e -> closeDelay.playFromStart());
alert.showAndWait();
我在我的应用程序的一部分中调用它:
infoBox("Karte wurde gelesen... bitte warten ", "Information-NFC", "Information-NFC!");
这里是函数本身:
public void infoBox(String infoMessage, String titleBar, String headerMessage)
{
Alert alert = new Alert(AlertType.INFORMATION);
alert.setResizable(true);
alert.getDialogPane().setPrefSize(480, 320);
alert.getDialogPane().setStyle("-fx-text-fill: red;-fx-font-size: 15px; -fx-font: 10px Tahoma; ");
alert.setTitle(titleBar);
alert.setHeaderText(headerMessage);
alert.setContentText(infoMessage);
System.out.println(infoMessage+"here");
//Logo für Programm Fenster
//////////// Logo ProgrammFesnter end
Image img2 = new Image(getClass().getResourceAsStream("logo.PNG"));
Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
dialogStage.getIcons().add(img2);
alert.show();
try {
Thread.sleep(8000);
} catch (InterruptedException ex) {
System.out.println(ex);
}
alert.close();
}
我可以在日志中看到 window 设置了变量“infoMessage”,但警告框本身是空的。 我不知道为什么。 你们中有人以前遇到过这个问题吗?
一切都很好 运行 除了这个小盒子... ???
感谢大家,祝您假期愉快....
史蒂夫
最有可能的问题是 Thread.sleep(8000)
调用。这会使 JavaFX 应用程序线程 休眠,从而阻止用户与 UI 进行交互,并且还会阻止安排任何渲染“脉冲”。换句话说,您的应用程序在这 8 秒内没有响应。
如果你想延迟 FX 线程上的动作,那么你应该使用动画 API。并且由于您似乎希望在允许代码继续之前等待警报关闭,因此您还应该使用 onShown
属性 和 Dialog
的 showAndWait()
方法。例如:
Alert alert = ...;
// configure alert
PauseTransition closeDelay = new PauseTransition(Duration.seconds(8));
closeDelay.setOnFinished(e -> alert.close());
alert.setOnShown(e -> closeDelay.playFromStart());
alert.showAndWait();