2016-01-07 1 views
0

Я делаю приложение, которое зависит от пользователя, нажимающего клавишу и события, основанные на времени. Методы будут работать в двух обстоятельствах:Как вы выполняете один из двух методов непрерывно, когда они запускаются бесконечно, а один - на основе события нажатия клавиши?

1: Если пользователь нажимает клавишу, приложение печатает foo.

2: Если прошло 3 секунды, то панель печати приложений.

Первый сценарий выполняется независимо от второго, а второй зависит от первого. 3-й таймер должен сбрасываться каждый раз, когда вызывается keypress event. После выполнения одного из этих двух методов приложение должно вернуться в состояние, в котором приложение ожидает повторного появления одного из этих двух событий.

код может выглядеть следующим

@override 
public void onPress(int i){ 
    System.out.print("foo"); 
} 

public void printBar(){ 
    if(timeElapsed > 3){ 
     System.out.print("bar"); 
    } 
} 

Так что на пресс-конференции должно происходить нормально при нажатии клавиши, но printBar должен работать только через 3 секунды после последнего выполнения последнего нажатия клавиши. Каждое выполнение нажатия клавиши сбросит таймер печати. Благодарим вас за помощь и сообщите мне, могу ли я предоставить лучшую информацию.

+0

Многопоточность с замком. – horatius

+0

Вы отмечаете этот вопрос с помощью [tag: android], но вы слушаете ключевые события нажатия. Для меня это не имеет смысла. Телефоны Android не имеют ключей, не так ли? – Sweeper

+0

Я создаю свою собственную клавиатуру, поэтому ключ относится к клавише клавиатуры. Я не включил эту клавиатуру в описание, потому что я думал, что обобщенный вопрос все еще достиг того, что я просил – Danny2036

ответ

1

Позвольте мне дать вам общее представление о том, как это сделать.

Я предполагаю, что ваш метод нажатия клавиш работает правильно (всегда печатает foo при нажатии клавиши). Теперь вам нужно решить, как сбросить таймер.

Я не знаю, какой таймер вы используете. Но я думаю, потому что приложение имеет какое-то отношение к ключевым событиям в прессе, и, возможно, вы используете свинг. Я бы рекомендовал вам использовать java.swing.Timer.

Очень легко получить, сколько времени прошло с помощью таймера поворота.

final Timer t = new Timer (3000, new ActionListener() { 
    public void actionPerformed (ActionEvent e) { 
     System.out.println("bar"); 
    } 
}); 

Это очень просто. 3000 означает 3000 миллисекунд или 3 секунды. По истечении секунд выдается actionPerformed. В actionPerformed вы можете позвонить по телефону printBar (без проверки!), Или вы можете позвонить по телефону System.out.println в соответствии с требованием.

Итак, теперь у нас есть эта настройка, как мы ее сбросим?

К счастью, класс Timer обеспечивает очень полезный метод, называемый restart. В вашем методе onPress, просто вызовите этот метод

@Override 
public void onPress() { 
    System.out.println("foo"); 
    t.restart(); 
} 

БУМ! Вы сделали это!

+0

Спасибо. Это очень помогло и направило меня в правильном направлении, чтобы использовать его по-разному, чем я планировал. – Danny2036