Я пытаюсь создать игру «Ударь крота». Я использовал качели для создания фона и добавления изображений кротов с прослушивателями событий, которые увеличивают счет каждый раз, когда они нажимаются, но у меня возникают проблемы с настройкой того, должны ли они быть видимыми или нет. Я подумал, что лучший способ сделать это - использовать таймер для установки/сброса логического значения. Затем это логическое значение может быть передано в конструктор setVisible() изображения. Идеально было бы рандомизировать период, в течение которого изображения видны. Я попытался создать экземпляр класса таймера и задачи (наследуя timertask), вызвав timer.vis(vis), который должен сбросить логическое значение, а затем передать задачу в timer.schedule(), но я получаю исключение нулевого указателя. Я иду об этом неправильно?
Как использовать класс Timer для периодической установки/сброса логического значения? (Джава)
Ответы (1)
Ну, это будет немного переворачиваться со случайными интервалами. Вы можете добавить код для вызова чего-либо в потоке SwingWorker в зависимости от значения бита после его изменения.
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicBoolean;
public class RandomBitFlip {
public static void main(String[] args) throws InterruptedException {
final AtomicBoolean var = new AtomicBoolean(false);
final Timer timer = new Timer(true);
randomlyFlip(timer, var);
// To demonstrate, print the value every 200ms
for(int x = 0; x < 300; x++) {
System.out.println(var.get());
Thread.sleep(200);
}
}
private static void randomlyFlip(final Timer timer, final AtomicBoolean var) {
final TimerTask task = new TimerTask() {
@Override
public void run() {
var.set(!var.get());
// Call SwingWorker thread here
randomlyFlip(timer, var);
}
};
timer.schedule(task, 500 + (long)(1500 * Math.random()));
}
}
person
BarrySW19
schedule
28.10.2014
JToggleButton
. - person trashgod   schedule 28.10.2014