寻找一种优雅的方法,只要应用程序在运行,就可以在后台一直保持Java线程一直在运行,以便JavaFX应用程序检查用户凭证是否有效。
我在Thread内部所做的事情是在一定间隔后使用户到期

最佳答案

如果要使登录超时,可以使用PauseTransition使登录过期:

Duration timeout = Duration.minutes(...);
PauseTransition logoutTimer = new PauseTransition(timeout);
logoutTimer.setOnFinished(e -> expireCredentials());
logoutTimer.play();


如果您需要随时重置超时,只需执行

logoutTimer.playFromStart();


它将重置计时器。

您还可以使用JavaFX属性使它在应用程序中易于管理。例如。

private BooleanProperty loggedIn = new SimpleBooleanProperty();

// ...

public void expireCredentials() {
    loggedIn.set(false);
}


然后,需要用户登录的操作可以检查此属性:

if (loggedIn.get()) {
    doSecureOperation();
}


UI控件可以将其状态绑定到它:

submitSecureDataButton.disableProperty().bind(loggedIn.not());
loginButton.disableProperty().bind(loggedIn);


也许

private ObjectProperty<Credentials> credentials = new SimpleObjectProperty<>();

// ...

public void expireCredentials() {
    credentials.set(null);
}

// ...

submitSecureDataButton.disableProperty().bind(credentials.isNull());
loginButton.disableProperty().bind(credentials.isNotNull());

08-16 15:19