x秒后更改变量(Java)

时间:2015-04-03 12:09:02

标签: java

我有以下代码:

private boolean votesEnabled = false;

在我班级的开头设置。 在处理某项操作后,我想将值从false更改为true

if (chatMessage.getText().equals("!newGame")) {
// change the value of votesEnabled for 90 seconds
}

现在,在另外两个案例中,我有类似这样的事情:

if (chatMessage.getText().equals("!lose") && votesEnabled == true) {

    // check, if the person already placed a bet:
    if (!currentPlayers.contains(chatMessage.getName())) {

        // Add the name to the list of betters
        currentPlayers.add(chatMessage.getName());

        // write it in to the text-file
        try (PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(loserlist, true)))) {
            writer.println(chatMessage.getName());
        }
    }
}

......你明白了。

现在我的问题:我是否必须扩展Thread-Class,以实现这一目标? 90秒(在!startGame之后)过去时,不会触发投票。没有线程可行吗?此外,变量必须在90秒后再设置为假。

快速示例

// Start => votesEnabled = false
// !newGame => votesEnabled = true
// 91 secs after !newGame => votesEnabled = false

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

扩展我的评论:

不是定义变量votesEnabled,而是定义:

private long lastVoteTimeMillis = 0L;
private static final long VOTE_PERIOD = 90000L;

然后定义两个方法:

private void enableVotes() {
    lastVoteTimeMillis = System.currentTimeMillis();
}

private boolean votesEnabled() {
    return System.currentTimeMillis() - lastVoteTimeMillis < VOTE_PERIOD;
}

现在你可以做到:

if (chatMessage.getText().equals("!newGame")) {
    enableVotes();
}

然后使用:

进行测试
if (chatMessage.getText().equals("!lose") && votesEnabled() ) {
    // Do your vote-dependent stuff
}

这可确保您的投票相关内容仅在!newGame后经过不到90秒时执行。

您可以为其添加灵活性。例如,您可以确保在lastVoteTimeMillis中设置enableVotes()之前,首先检查您是否在90秒内不能延长投票期限。您可以添加disableVotes()方法,将lastVoteTimeMillis设置为0L,因此在下一次查询中将超过90秒。

此解决方案根本不需要其他线程,也不需要Timer创建的线程,也不需要ThreadRunnable的扩展。但是,如果您的游戏已经是多线程的,请务必制作lastVoteTimeMillis变量volatile

答案 1 :(得分:-1)

if (chatMessage.getText().equals("!newGame")) {
// change the value of votesEnabled for 90 seconds
 votesEnabled = true;
 sleep(90000);
 votesEnabled = false;
}