2009-03-26 5 views
0

Скажем, у меня есть GUI, и я хочу, чтобы программа фактически запускалась при нажатии пробела, но если пробел снова нажат, я хочу, чтобы программа выходила. Будет что-то вроде этой работы?Работа с KeyEvents в java

public class MouseClicker extends JApplet implements KeyListener{ 
int counter = 0; 
MouseClicker m1 = new MouseClicker(); 

//all of the other methods 

public void keyPressed(KeyEvent e) { 
int keyCode = e.getKeyCode(); 
if(keyCode==KeyEvent.VK_SPACE){ 
m1.click(); 
counter ++; 
if(counter%2==0) 
    System.exit(0); 
} 
//other methods needed for KeyListener 
} 
+0

Обратите внимание, что счетчик действительно должен быть неустойчивым. – Eddie

ответ

2

Попробуйте и посмотрите ;-)

серьезно, то, что вы имеете в виду вы хотите запрограммировать для запуска при нажатии на пробел? Если программа уже запущена, как вы собираетесь получать KeyEvent?

Что касается другой половины вашего вопроса, то код, который у вас есть, в общем случае заставит Java выйти при нажатии пробела. Обратите внимание: нет смысла использовать счетчик, поскольку, как только Java выходит, значение счетчика теряется. Также обратите внимание, что JApplet является исключением из «вообще» ... вы обычно не можете вызывать System.exit из апплета, потому что апплет работает под управлением браузера, а Java должен только выйти, когда пользователь закрывает браузер , не всякий раз, когда ваш апплет сделан. В одной JVM могут быть другие апплеты, и, возможно, они не будут делать то, что они делают.

+0

Я изложил свой вопрос ужасно, извините. При запуске я решил запустить метод click(), который будет продолжать нажимать на одну и ту же область снова и снова с интервалами времени между щелчками, пока не будет нажата пробел. Это потребует потоков, правильно? – Azreal

+0

Кроме того, я имел в виду, что эта программа не должна быть на веб-странице, а вместо этого быть приложением. Java - это мой единственный язык, и единственный способ, которым я это знаю, - запустить программу прямо из компилятора. Есть ли способ запустить программу как приложение? – Azreal

+0

Да; вы начинаете его с общедоступного метода static void main (String [] args), и вместо JApplet в качестве контейнера для вашего графического интерфейса вы используете JFrame вместо JApplet. Задайте другой вопрос, если вам нужна более подробная информация по этому вопросу. –

0

Возможно, я думаю, что код AWT правильно, но все остальное очень загадочное (Не то, что я не понимаю, но это не выразить то, что вы на самом деле очень хорошо, не так ли?)

Как насчет:

boolean running=false; 

... 
if(running) 
    System.exit(0); 
else 
    running=true; 

вместо этого?

Обновление: После прочтения вашего обсуждения на другом посту у вас будет немного странности.

Существует эта концепция AWT-нити. Все, что сделано с AWT, должно выполняться на этом потоке. Поэтому, когда нажимается пробел, вы получите это событие в AWT-потоке. Вероятно, вы не хотите его сохранять, потому что, пока вы держитесь за него, это предотвратит другие обновления графики.

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

Когда они снова нажимают пробел, system.exit() должен работать нормально.

+0

Запускает предопределенное логическое значение в java? – Azreal

+0

Нет, первая строка кода добавлена ​​к моему как насчет: текст. –