Попробуйте это
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');
if($result){
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'];
}
}
Я понимаю, что это исключение возникает, когда этап переходит в режим скрытия, а компонент уведомления не может найти этап, когда уведомление должно отображаться на этапе. После поиска в Интернете я нахожу два решения этой проблемы.
Решение 1:
Откройте сцену и покажите уведомление. Таким образом, мы должны проверить, что если сцена была скрыта, откройте ее и покажите уведомление. Чтобы сделать это, мы должны добавить это условие в метод CreateNotification:
Stage stage = (Stage) button.getScene().getWindow();
if (!stage.isShowing()){
stage.show();
}
Решение 2:
В этом решении мы создаем фиктивный этап и устанавливаем его непрозрачность в ноль, а затем, скрыть основную сцену. Я нахожу это решение по этой ссылке и помещаю код в здесь :
public void createDummyStage() {
Stage dummyPopup = new Stage();
dummyPopup.initModality(Modality.NONE);
// set as utility so no iconification occurs
dummyPopup.initStyle(StageStyle.UTILITY);
// set opacity so the window cannot be seen
dummyPopup.setOpacity(0d);
// not necessary, but this will move the dummy stage off the screen
final Screen screen = Screen.getPrimary();
final Rectangle2D bounds = screen.getVisualBounds();
dummyPopup.setX(bounds.getMaxX());
dummyPopup.setY(bounds.getMaxY());
// create/add a transparent scene
final Group root = new Group();
dummyPopup.setScene(new Scene(root, 1d, 1d, Color.TRANSPARENT));
// show the dummy stage
dummyPopup.show();
}
Как я уже упоминал ниже, мы должны вызвать этот метод, прежде чем скрыть основную сцену:
@FXML
public void handleSysTryAction(ActionEvent event) {
Stage stage = (Stage) button.getScene().getWindow();
createDummyStage();
stage.hide();
}
Я реализую это два решения, и все работает хорошо. Если у вас есть лучшее решение для этой проблемы, пожалуйста, поставьте здесь
Вы можете загрузить весь проект Netbeans из моего Dropbox
Я не мог понять, почему первое решение хамида не работало для меня, пока я не отлаживал создание уведомлений. Я узнал, что помимо необходимости, чтобы Window был isShowing
, он тоже должен быть isFocused
!
Мое решение состоит в том, чтобы вызвать что-то вроде этого метода до Notifications.show()
:
private void focusStage() {
final Stage stage = (Stage) button.getScene().getWindow();
if (!stage.isShowing()) {
stage.show();
}
if (!stage.isFocused()) {
stage.requestFocus();
}
}