一直保持 Java 线程 运行
Keep Java Thread running all the time
正在寻找一种优雅的方式来保持 Java 线程 运行 始终在后台,只要应用程序是 运行,对于 Java FX 应用程序检查用户凭据是否有效。
我将在 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());
正在寻找一种优雅的方式来保持 Java 线程 运行 始终在后台,只要应用程序是 运行,对于 Java FX 应用程序检查用户凭据是否有效。
我将在 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());