我有以下代码:
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
感谢您的帮助
答案 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
创建的线程,也不需要Thread
或Runnable
的扩展。但是,如果您的游戏已经是多线程的,请务必制作lastVoteTimeMillis
变量volatile
。
答案 1 :(得分:-1)
if (chatMessage.getText().equals("!newGame")) {
// change the value of votesEnabled for 90 seconds
votesEnabled = true;
sleep(90000);
votesEnabled = false;
}