【问题标题】:Keep Java Thread running all the time保持 Java 线程始终运行
【发布时间】:2018-03-08 23:22:31
【问题描述】:

寻找一种优雅的方式来让 Java 线程一直在后台运行,只要应用程序正在运行,JavaFX 应用程序就会检查用户凭据是否有效。 我将在Thread 中做的事情是在一定时间间隔后使用户过期

【问题讨论】:

  • 为什么需要这样做?当然,只有当用户更改某些内容(例如,提供用户名或密码)时,这才会改变。为什么不只检查发生的时间?
  • JavaFX 应用程序需要在一定时间间隔后使用户凭据过期
  • 你能用这些信息更新问题吗?还有其他相关信息,例如您希望何时(在什么条件下)重置超时?
  • 为什么不在超时后拒绝查询? @james_d 是对的,这里不需要后台线程。
  • @DonBranson 如果您希望 UI 具有响应性,您可能需要某种计时机制。用户填写表单并提交它不是一个好的用户体验,然后才被告知他们的会话已过期。您希望立即在 UI 中获得反馈。

标签: java multithreading javafx daemon runnable


【解决方案1】:

如果您想使登录超时,您可以使用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());

【讨论】:

  • 很想知道 PauseTransition 与时间轴方法的比较
  • @JohnC 基本上没有区别:PauseTransition 在满足您的需求时更方便。如果你想要一个重复的动作,或者想要在多个时间点做某事,你需要一个时间线。两者的工作方式相同。 (不涉及线程。)
  • 是的,事实上,只要应用程序正在运行,我就需要这种情况一直发生。所以看起来时间线更适合我的用例
  • @JohnC 你不会在用户重新登录时重新启动计时器吗?不是在用户自动注销时立即?
  • @JohnC 是的,但是将cycleCount 设置为INDEFINITE 的时间线将每隔x 秒将凭据无效。您希望在 他们登录后 秒后取消凭据 x。 (假设用户离开机器,在x 秒后凭据被取消。他们碰巧返回并完成他们的新登录x-1 秒后......他们将在 1 秒后再次注销。)所以你只需创建一个PauseTransition 并在用户登录时调用playFromStart()
猜你喜欢
  • 2013-05-09
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多